triggon ライブラリ開発で学んだこと

【個人ブログ】開発過程と学習記録

投稿日:

triggonをようやく正式版にリリースできました!
正式版までの期間は約2ヶ月でした。今まで追加した新機能の数はたぶん30近く?あると思います。
このライブラリ開発において学んだことを書いていきます!

解析(AST, inspect)

変数名の特定、値の代入するのに使ったライブラリがASTinspectです。
まず inspect ですが、最初は「フレームってそもそも何?」というところから始まりました。理解するまで少し時間はかかったんですけど、使う場面がかなり多かったので、気づいたら自然に使いこなせるようになっていました。
一方でASTは、ほんとうっっに難しかったです!ノードの種類がとにかく多いうえに、その中でもさらに分岐があるので時間をかなりかけました。さらに、parseするためにコードを抜き出す必要があって、その部分でもかなり苦戦しました。習得するまでに1週間くらいはかかったと思います。

最初はずっとドキュメントを見ながら進めていたのが、今では見ずにすらすら書けるレベルまで達しました!

遅延ラッパー

任意のタイミングで早期リターンをしたくて作り始めました。
最初は関数とクラスメソッドを別々に扱っていましたが、最終的に一つのラッパー関数に統一。
さらにライブラリ関数にも対応できるようにしました。
どうしても自然な呼び出しで遅延させたくてかなり試行錯誤しましたが、特殊メソッドを使うことで実現することができました!

特殊メソッド

これは遅延ラッパーを作る際にすごい役に立ちました。(__getattr__や__call__)
インスタンスで関数名を渡す必要がないのと、あの自然な形で遅延できるようになってるのは、まさに特殊メソッドのおかげです!

マルチスレッド

RustやGOでは使ったことはあったのですが、Pythonでは初めてで、関数名と引数別々にするのが書き方の違いを感じました。RustとGoではそのまま入れられてたので。
それにともなって、スレッドロックも学びました。
競合を防ぐために使われていて、実際にtriggonのタイマー機能で取り入れました。

カスタム属性

これは結構終盤で知ったことで、TrigFuncによる遅延関数かの判別や、デバッグ機能のための情報として使用しました。
個人的に、もっと早く知りたかったって思うほどすごい便利な機能です!

最後に

この2ヶ月間、本当にたくさんのことを学びました!
正直ほとんどがやったことなかった処理ばっかで、リリースしてもバグが多発してたりとかありました…。エラーチェックをほとんどしてなかったり、意味のないコードを書いてたりひどかったのですが、今は常にエラーチェックや最適なコードを意識しながらできるようになりました。
あとは、一気に書いてからテストすることが多かったので、ちょっとずつ書いてテストするように心がけるようにもなりました。

またなにかいいアイディアが思いついたら、新しいライブラリを開発したいなと思います!

最後まで読んでいただきありがとうございます!

コメント

タイトルとURLをコピーしました