マストドン(Mastodon)向けに色んなことをやりたくて、ついにOSSでのプログラミングに手を出してしまいました。元々はプログラミングが苦手だったのに。ホント遊ぶ欲って凄いですね。。。
今回はこれからプログラムを作ってみようなんて考える方の参考になればと思って、その経過をご報告したいと思います。
匠のプログラミングに関するスペック
工学部生時代はプログラムが大の苦手でした。あまりにもできなくて、教授に怒られるぐらい。
CやC++、Javaはひと通り習いましたが、単位が取れる程度でほとんど実用的なプログラムが組めるレベルには至りませんでした。今考えると、非常にもったいない。。。
また、金に困ったバイトで、かろうじてPerlで簡単なアンケートCGIを組める程度にはなりましたが、所詮はその程度。
就職してからはシェルスクリプトはかじりましたが、高級言語はほとんどタッチせず。。。
現在も基盤系&セキュリティのエンジニアを生業にするも、やはりプログラミングからは避けて生きる社会人生活でした。
プログラミングに目覚めたわけ
2017年4月からマストドンにハマり、様々な角度でウォッチャー的な活動をしております。その中で、下記が分かると面白いなぁ、と思ってしまったのがキッカケです。
- マストドンユーザーはどのアプリを使っているのか?
- そもそも実際にマストドンを利用しているのは何人ぐらい?
ホントはそんなにやり込むつもりはなかったんです(白状
ですが、あれもやりたい、これもやりたい、あーでもないこーでもない、とTry&Errorを重ねた結果、下記のような記事になりました。
最初は「API?英語だぁ?うわぁ。。。」とか思ってたのに、気づいたらなんとかなってました。いやぁ、趣味で始めるのってホントコワいw
苦手だったプログラミングを克服(?)した方法は?
まず、迷ったのはプログラミング言語の選択。
Ruby か Python かはかなり悩みました。マストドンだから Ruby だろ?と何度も思いましたよ、ホントは。
でも、この本に出会ってしまったんです。

もう完全にこの本をタイトル買いしてしまったのです。良い大人が何やってんだ、と思ったものの、これがまた「ほほぅ」「なるほど」「あ、そういう感じ」とおもわされることの連続で、あれよあれよと読み終わってしまいました。いやぁ、やるなぁ、オライリー。
さて、こうなるといくつかスクリプトを組みたくてたまらなくなってしまって、マストドン関連をやりたくなるわけです。すると、途端にAPIの壁がそそり立つわけで。
もう英語英語英語。そりゃそうですよ。
毎日会社帰りの電車でひたすらに辞書アプリ片手に睨めっこ。やりたいことに使えるメソッドが実装されてるか確認してはプロトタイプ作っては試し、失敗し、試し、失敗し。。。
でも、昔は大嫌いで発狂しそうだったデバッグが、趣味で能動的にやると、こんなに楽しいんですね!!大人になるって素敵!!!嫌いな時も大人でしたが。
そんなこんなで、作りたかったスクリプトができちゃうわけです。さっき紹介した「マストドンのクライアントアプリ利用ユーザー数」を計測するスクリプトが。まだまだ荒削りなのに、そっと内容をブログにアップロードしてみたりなんかして。
できたー!終わったー!
なんて終わって数日すると、「こんなんで満足していいのか?」とアスリートのごとくフツフツと沸き起こってくるわけですよ。もう完全に夢中です。
そんな中、基本的な書き方から一般的でキレイな書き方とか、わかりやすくてもう一歩先に進めそうな書籍ないかなぁ、できればKindle本で!なんて思ってたら、こちらに出会うわけです。

ド集中して1時間半くらいで読み込められるわけなんですが、これが当たり。そうそう、読みやすい「良い書き方」とかがちょうど知りたかったんですよ!デバッガとか便利なものがあるのね!これこれ!!これですよ!!!
もうドンドンスクリプトを改善して機能追加しつつ、さらに違うスクリプト作りたくなりますよね。そして、「DAU(デイリーアクティブユーザー)」とか計算できるスクリプト組んで、またブログにアップロードしたりなんかして。
もちろんMastodon.py使って自動投稿なんかも試したりしましたよ。それまでブログ書いたら、手動でトゥートしてたんですけど、どうも真夜中とかにトゥートするのはなんだし、定期投稿したいし。そう思って作ると、これまた便利。
そうすると、今度は拡張性なんか出そうとすると、SQLite3なんかで適当に作ってたデータベースではスケールしにくいことがわかるわけなんです。初めから薄々感じてたけど、まさかこんなにハマるとは思ってなかったんで。お前、何年インフラ屋やってんだ?と自分ギレするも、とりあえずサックリ習得するにはどうしたもんかと思いながら見つけたのがこちら。

Oracle Database や SQL Server の下地があったのもあってか、移動時間の1時間でサックリ。あまりの簡単さに逆に不安を覚えてこちらに手を出す始末。

これで不安が消えて、PostgreSQLサービスを立ち上げて、運用系の設定を施してみたりなんかして。あとは psycopg2 使って SQLite3 から PostgreSQL へガツガツ移行して、「WAU(ウィークリーアクティブユーザー」を算出できるようにして夏休みを潰したりなんかするわけで。。。
その結果が今のブログ記事に現れているわけです。
はい、けっこうオタク気質なんで、こうなりました。誰かの参考になるかはかーなり怪しい、、、
今後の楽しみ方
まだまだやりたいことがあります。ToDoリストはこちら。
- MAU(マンスリーアクティブユーザー)の算出&掲載
- 作ったスクリプトのデーモン化(systemctl対応)
- Streaming API を使用しないことで Token不要で漏らさず Toot を全て取得できるスクリプト
- 異なるインスタンスのアカウントのToot同期ツール(8割完成)
フロントエンドにサッパリ手を出したことがないんですが、いずれフレームワークにチャレンジしてみたりなんかして下記のようなサービスを作ってみたいです。
- マストドンお気に入り管理サービス
- お気に入り検索
- お気に入りタグ付け
- お気に入りバックアップ
まぁ、サービス提供を考えると、プログラミングだけじゃ済まなくなってくるので大変なんですが、まだまだチャレンジしてみたいなと思う2017年夏の匠でした。
興味のある方はこちらもどうぞ。