Javaの開発や、OSSとして公開する際のライセンス選定、テストコードの考え方などについて参考資料をまとめました。
記載内容や参考記事の選定など、全般的に筆者個人の好みや情報収集の限界が反映されていることをご承知おきください。
参考記事:
- Awesome Java : 素晴しい Java フレームワーク・ライブラリ・ソフトウェアの数々 - Qiita
- Webアプリケーションフレームワーク導入時に考慮すべき22の観点 - Qiita
- Javaで業務系システムを開発するときの鉄板構成(2015年12月版) - Qiita
参考記事:
- Javaのロギングライブラリの歴史と現状をふんわり把握する(初学者向け) - Qiita
- javaのロガーが多すぎて訳が解らないので整理してみました - 文系プログラマによるTIPSブログ
- Javaのロガーの種類が多すぎ、一元化したい - Qiita
- Javaのロギングについて - Qiita
個人的には slf4j + logback が2017年時点では比較的安定しており、利用者数も多く選択しやすい組み合わせだと思います。
個人で作ったツールにせよ、業務で作ったツールをOSSへの貢献で公開するにせよ、避けて通れないのがライセンスの問題です。
参考記事:
- Licenses & Standards | Open Source Initiative
- Githubによる、オープンソースライセンスの選び方 | オープンソース・ライセンスの談話室
- 知る、読む、使う! オープンソースライセンス - 達人出版会
- Licensing a repository - User Documentation
- githubでライセンスを設定する - Qiita
- たくさんあるオープンソースライセンスのそれぞれの特徴のまとめ | コリス
どのラインスを選ぶかだけでなく、個人的には以下の点にも注意が必要と考えています。(逆に言えば、これらの点が最終的なライセンス選定に影響してくる)
- 他人のblog記事やSNS, 書籍などからソースコードをコピーするときの著作権とライセンスの確認・取扱
- ライブラリをリポジトリに含めるか/含めないか、含めるとしたらソースコードを含めるのか、バイナリを含めるのか。
- ビルドリリースに何を含めるのか。
- ライブラリを改造して使うか、そのまま使うのか。
- 考え方の話になり筆者個人の主観になりますが、OSSのJavaライブラリはドキュメントが充実していないものも多々あります。
- そうした場合、ライブラリのソースコードの、特にテストコードを見てみると使い方のパターンが載っていて、参考になることが多いです。
- 特に Netty でそれを強く感じました。使い方まで細かくドキュメント化されておらず、じゃぁどうやってこのクラスを使うの?となったときに、テストコードを見るとなんとなく分かる感じです。
- コレ読んで下さい : http://t-wada.hatenablog.jp/entry/tddbook
- あくまでも個人的な意見ですが、いくら「オブジェクト指向として正しい」コードを書いても、テストコードが無いとリファクタできず、容易にレガシー化します。
- 逆にテストコードさえあれば、後からいくらでも必要に応じて設計や実装を洗練させることができるので、オブジェクト指向を学ぶより先にテストコードを書けるようになったほうが良いと思います。
- テストコードを書けるクラス設計は、結果として疎結合で、副作用が少なくコードの責務が明確で、テストコード自体が使い方のドキュメント代わりになるという、メリットしか無い状況につながると思ってます。
- とはいえなんでもテストコードを書くのは、機能によっては非常に難しくなるものもあり、時間の浪費につながります。
- あくまでも個人的な見解ですが、まずはレイヤーで分けた上で、ユーティリティクラス / DBのモデルクラス あたりで、テストコードを書きやすくて再帰テスト実行のメリットが大きいところから手当をすると進めやすいかと思います。
- ネイティブUIについてのテストコードは非常に難しいですし、Webアプリケーションが生成するHTMLのテストになるとE2Eテストとなりまた別のレベルになりますので、分けて考えてあげれば良いかなと思います。