【技育展参戦記録 - 開発スキル支援】rehearsalという名前のテストツール?を作ったvol. 2
簡単に自己紹介とそもそもどんなものを作ったのかの話
3項目でまとめる自己紹介
- 19才の大学2年です。
- おそらく、ボクの自己紹介は文章でまとめるよりもTwitterを見に行ったが早い気がするのでそちらを見てください。今は大学で衛星打ち上げようかな~、ロボット作ろうかな~、と右往左往しながら毎日過ごしています。
- Twitterはフォローしておくと過去の経歴だけでなく未来の経歴も見ることができるのでフォローしておいたほうが良いです。
3項目でまとめる制作物紹介
- rehearsal という名前のコンソール上で実行可能なテストツールを作りました。
- 正直、制作物の説明はドキュメントを読むのが手っ取り早いのでそちらを読んだほうがいいかもしれません
- 後から深堀していきますが
golang
を使用して作りました。
モチベーションの話
開発動機の話
そもそも、最初の開発動機としてはAtCoder Hueristic Contest 003で、実装したはいいものの、実際にどのような実行が行われているのかを確認するすべがなく(単純に僕の実装力が足りなかったのはもちろんある)結局一回も提出することができなかったことから、今回の開発が始まりました。
初期開発中・ハッカソンの話
ハッカソンで開発してた時の話です。この話は「【技育CAMP参戦記録 - 開発高速化編】rehearsal【アイデア/振り返り編】」をご覧ください。
第二段階開発中の話
技育展で開発してた時の話です。大学で今回のプロダクトであるrehearsalの話はちらほらしていたのですが、その中で、「使いたいんだけど、ドキュメントがない」という指摘を受けてしまったので急遽ドキュメントを作ることになりました。
その他、実際に使用するにあたり、プログラムだけでは面白みに欠けることをうすうす気づいていた中、技育展の最初の打ち合わせの最中、TCP通信の話が上がり、「どうせだから載せてやろう」のテンションでTCP通信、大学で使用することがほぼ確定していたシリアル通信などの機能を追加して今回の技育展に臨みました。
技術的な解説の話
使用言語とかライブラリの話
今回はGo言語で開発しました。初期開発の言語選定時、最初に上がったのはC++とPython(一応C#)でしたが、それぞれ実装が難しかったり、そもそもの速度が遅いという問題があったのでそれぞれの問題をカバーできる言語がボクの知っている限りGoでした。
今回のプロダクトはGo言語のsliceの部分配列からchanまで、ほぼすべての言語機能を使用したので、Go言語でわからない文法はないほどに成長できたと思います。
また、極力外部ライブラリに依存しない用に書いたのですが、いくつか使用したのでそれを紹介したいなって思います。
-
github.com/pkg/errors
- エラーでスタックトレースするために使用
-
github.com/streamwest-1629/convertobject
- 今回制作した自作ライブラリで、mapをオブジェクトに変換するために使用
-
github.com/urfave/cli
- CLIツールとして楽に設計したかったので使用
-
go.bug.st/serial
- クロスプラットフォームにシリアル通信を行うために使用
-
gopkg.in/yaml.v3
- YAMLファイルを読み取るために使用
アーキテクチャの話
今回はオニオンアーキテクチャを用いて開発しました。一部クリーンアーキテクチャっぽい所もあるのですが、多分オニオンアーキテクチャです。この辺の話はこれだけで10000字くらいかけるくらいの難しい話題なので後から書きたくなったら書きます。
今後の展望の話
機能の話
rehearsalはテンプレートファイルを使用して定義するのですが、設定項目を増やすことでより多くの機能を追加することができればと思います。
ドキュメントの話
英語版ドキュメント、書きたいなって思います。(小並感)現状でもある程度文量あるので今ある日本語訳を英訳していけたらと思っています。
まとめ
今回は自分の作りたいものを作って満足です。ありがとうございました!
Discussion