sci

最果て風呂

Flask を触る

ポカァン

経理が本職である友人から連絡がありまして、彼女は会社の経理と総務をひとりで切り盛りしている割には常々「AI に仕事を奪われちゃう(>_<)」と怯えているのでした。表に出せないようなグレー(というよりも真っ黒)なお金の流れとかも必要でしょうから、そんなに心配することは無いように思うのですが……。そういった融通のきく AI はすでに開発されているのかもしれません。

さて前口上になるのですが、「お薦めされた Python の勉強を始めたよ☆(ゝω・)v!」と言われてしまいました。はてさて何のことでしょう?オフサイドルールの嫌いな自分が Python を薦めるだと?そんなアホなことがあるでしょうか?

ちょっと前に雑談した時のこと。「プログラミング勉強したいねんけど」「なんで?」「かくかくしかじかで仕事が無くなるねん」「んなアホな」「実際アメリカでは・・・」「・・・自分ビビリすぎやって……。わいも素人だから詳しくないねんけど、iOS のアプリを作るなら Swift だね。仕様も固まってきたし、そろそろ手を出しても安心な頃合。本当は Objective-C を薦めたいけどね。Windows を考えるなら C# かな?Microsoft 製品は嫌いやけど、これと Visual Studio だけは好きやねん。マジでオススメ。C# はいいぞ!あとウェブ系のアプリなら PHP がいいらしいけども、自分はあんま好きじゃないわ。いつもセキュリティ問題が出てる感じがするわ。Perl というのもあるけど、枯れ過ぎて新規で触る人がいないみたい。無くならないけどたぶん消えてく存在。金融関係に行った友達に確認した方がいいけど、そっち系なら Haskell, OCaml, F# とかいう関数型言語がいいらしいわ。でもこっち方面はいろいろヤバくて出る杭を集団で叩いて潰すとかして宗教チックだから近付かない方がいいよ。あ、有名な Java を忘れてたわ。一番人気がある言語らしいわ。これ電子認証で使ってるやつだけど、Mac で動かない(Apple が非推奨しとる)から消えて無くなれ〜って思ってる。Oracle という会社が持ってるんやけど、ジンクスというか法則があるから遠からず消えてくわ。そうそう、名前が似てるだけで全然ちゃう JavaScript っていうのもあるよ。Node ってやつで動かしたら良くなってたわ。ブラウザで動く頃の印象しかなかったけど最近のはもの凄く良くなってる。これもお薦め。ラズパイとか使って自宅の監視とかするなら C とかだけど、そんなことしないでしょ?個人的には Ruby を薦めたいけれど、人工知能ディープラーニングなら LispPython って印象があるわ。聞いとる?」「ん〜〜わかった」というやりとりをしたのでした。まさか最後のところしか聞いていなかったとかなの?

書名は聞かなかったのですけれど、Python の入門書は Python2 系で書かれているそうです……。Python2 というヘビと Python3 というヘビが互いの尻尾に食らいついて飲み込もうとしている図。どちらか一方を殺して片方を生かすのか、そのまま共倒れになるのか。

お薦めした(ことになっている)わりには "Hello, World!" 程度しか Python を知らないわたしです。友人は若くて頭が良い人なので、すぐに追い抜かれてしまうでしょう。「わっからへんわ」とお茶を濁すのもアリです。でも良い機会なので自分も Python を勉強してみようかな?と。

本題

さすがに今更 print("hoge") ではアレなので、ブラウザを使った何かを作ってみることにしました。Django は昔から知っていましたが、Rails みたいな太っちょは不要です。次いで Bottle や Flask が人気とのこと。今回は Flask を選択しました。

Flask は軽量な Web アプリケーションフレームワークで、Sinatra のようなものらしいです。これを使うには、あらかじめ virtualenv をインストールしておかなければいけないそうです。これは rbenv/bundler, plenv/carton のように、pyenv/virtualenv にあたるものらしい。つまり、閉じた環境を作ってくれるもの。Haskell の sandbox みたいなものかしらね?

とりあえず Flask の ドキュメント に従いながら手を動かしてみます。

Installation

sudo pip install virtualenv

The directory '/Users/hoge/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.

のようなエラーが表示されてしまいましたけれども、インストールは出来たみたい。

Collecting virtualenv Downloading virtualenv-15.1.0-py2.py3-none-any.whl (1.8MB)

どうやら Python2 にも Python3 にも対応しているようですね。

mkdir myproj
cd myproj
virtualenv venv

Using base prefix '/usr/local' New python executable in /Users/hoge/myproj/venv/bin/python3.5 Also creating executable in /Users/hoge/myproj/venv/bin/python Installing setuptools, pip, wheel...done.

これで閉じた環境が出来上がりました。11MB 程度あるみたいです。といってもシンボリックリンクばかりなのに、何がそんなに容量を食っているのでしょうか?

. venv/bin/activate

とすると、コマンドプロンプトの先頭に (venv) が付加されて virtualenv を実行していることが分ります。これを抜けるには deactivate とする。ここで入力したコマンド履歴は .bash_history に記録されるようです(されてない)。

さて続き。virtualenv を実行した状態で Flask をインストールします。

pip install Flask

Successfully installed Flask-0.11.1 Jinja2-2.8 MarkupSafe-0.23 Werkzeug-0.11.11 click-6.6 itsdangerous-0.24

関連するライブラリもインストールされました。ほんとに gem っぽいですね。あ、ローカルにインストールされるので sudo は不要。全部で 16MB 程度になりました。システムにインストールすることも可能ですけれども、いまどきのディスク容量ならば各プロジェクト毎に閉じ込める方がいいかもしれないですね。

Quickstart

例題は Hello, World! と返すだけの Web アプリケーション。こういう短いものは Vim で入力した方がいいですね。vim hello.py

5 行しかないものですけれど、それぞれについてきちんと説明がなされています。Python コミュニティはドキュメントの整備がすごくていつも関心させられます。それだけリソースがあるってことなのかも。Vim の英語よりも読み易いのは何故でしょう?頭から順番にすらすら入ってくるわ。言い回しが平易なのかもしれないですね。

WSGI って何ですか?Ruby の Rack みたいなものかな?

ルート毎にいちいち関数にしなくちゃいけないの?面倒だわ。パスが増えたら関数名も別途考えていかなくちゃいけないのか……。ま、パスと同じにしておけばいいけど。

export FLASK_APP=hello.py
flask run

として、localhost:5000 にアクセスすると "Hello, World!" が表示されました。Wi-Fi で繋がっている他の機器からもアクセスできるようにしたい場合は、flask run --host=0.0.0.0 のようにする。これは Sinatrarackup -o 0.0.0.0 と同じですね。

それにしても、環境変数 FLASK_APP にアプリケーションのファイル名を設定するのが面倒ですね。でも、こうすると便利になる意味があるのかもしれない。なにせまだ Quickstart の段階なのだから、慌てる必要はありません。

Python は速度は速いのですけれど、オフサイドルールが嫌で敬遠していました。が、今回ちょっとだけの入力ですが、エディタがよろしくやってくれるので気にならなくなりました。エディタの設定は変えていないのですけれどね……。試行錯誤をする際に、コメントアウトだけではエラーになっちゃって、整形し直さなくちゃいけなかったからだったかなぁ。