Developers.IO 2017セッション「Pythonを使ってターミナル上でアニメーションを動かそう」で話しました #cmdevio2017

Developers-IO-2017-400x400

サーモン大好き横山です。

クラスメソッドが運営するIT系技術ブログDevelopers.IOのカンファレンスイベントDevelopers.IO 2017にて、セッション「Pythonを使ってターミナル上でアニメーションを動かそう」を発表しました。そのレポートです。

発表スライド

スライド

Pythonを使ってターミナル上でアニメーションを動かそう

使用したソース

tututen/devio2017-terminal-animation: Developers.IO 2017 発表で使用したスクリプト にソースコードをPushしています。

テキストを使ったアニメーション

前半は、最初にCarriage Return(以下CR)を使ったアニメーションについて話しました。
こちらはアニメーションするにはとてもお手軽ですが、表現方法が1行に限られ、表現できることが限られてくるのが難点です

DevIO2017_python001

次に、clearコマンドを使ったアニメーションについて話しました。
CRを使ったアニメーションと違い、ターミナル全体を使ってアニメーションを表現することが可能です。
ただ、出力する量が大きくなるにつれ、画面のチラツキが気になるようになります。

DevIO2017_python002

最後に curses を使ったアニメーションの話をしました。
こちらは、TUIアプリケーションに特化したライブラリですので、相性がよく、clearを使った同様アニメーションもチラツキが少なく表現できます。
また、ターミナル上の座標を指定して出力も出来るので、任意の場所に文字を置きやすくなっています。

しいて難点を上げるなら、とっつきにくさが挙げられるます。
初期化処理や、痒い所に手がとどくまでの道のりが他の手法と比べ長いです。しかし、それを補う程の便利さはあります。

どの手法も手間と表現の自由度が違うので、適材適所で作成することをオススメしました。

画像を使ったアニメーション

後半は、 pillow を使い、画像からターミナルへの出力のデモを行いました。
1枚画像からターミナルへ文字として出力する方法を発表しました。

DevIO2017_python004

説明後はGIF画像の分割し、前半で説明したcurses組み合わせてアニメーションするところまで話しました。

おまけ

最後に発表したおまけの動画バージョンです。

This movie requires Flash Player 9

まとめ

普段、お仕事ではPythonは業務のちょっとした手助けで書いたり、AWS Lambda上で動くものを書いたりしますが、
今回こういう場で、業務には役には立たないかもしれないけどこういうこともできるよ!というのを提示できたのであれば幸いです。