ソフトウェア設計 勉強の手引き

この記事は弊社の後輩プログラマーを読者と想定して書いています。しかし一般的な内容でもあると思いますのでここに公開します。

なぜソフトウェア設計の勉強をしなければならないのか?

プロのプログラマーは、堅牢で、なおかつ要望を即座に実現するソフトウェアを構築するために、「プログラムの変更が容易である」状態を維持しなければならない。もう何十年も先達プログラマー達はそのためのノウハウを蓄積し、原理原則レベルまで抽象化して落とし込んでいる。これを学び体得することが、プロのプログラマーには必要である。

どう勉強したらいいか?

まず、設計スキルを完璧に身につけた!と言い切れる人は多分いない。プログラマーは皆、常に勉強し続けるのみである。設計スキルを向上させるための基本的な方法は、他人のコードや本で良い設計のエッセンスをインプットし、自分の書くコードにアウトプットする、これを繰り返すことである。
インプットの方法だが、まずは他人のコードを読む習慣があると良い。会社やサークルで、メンバーの書いたコードを読み、その設計の良し悪しについて話しあってみる。公開されているOSSはネット上に無数にあるので、興味があるプロジェクトを見つけてコードを読んでみる。できればOSSにコミットするコントリビュータを目指すといい。
設計に関する原理原則、体系だった情報を得るには、本を読むことになる。以下はどの資料をどういう順番で読むといいかを例示する。この通りに読まなくても、自分に合う本をピックアップして良いし、興味のあるところから取り組んでも良い。

レベル1. 何はともあれ読むべし

レベル2. 設計の原理原則を知る

設計の原理原則はプログラマーの教養であり、共通言語である。知らないと他の本が読みづらい。

レベル3. コードのテスト手法について知る

コードが正しく動いているかチェックするには?プログラマーは皆テストを「書いている」。それに伴い、テストをしやすいコードが良いコード、という指標が存在する。テストを書くとはどういうことか知らないといけない。

  • テスト駆動開発
    • テストファースト(コードより先にテストを書く)の手法をテスト駆動開発(TDD)と呼ぶ。テストしやすいコードを書きたいなら、最初にテストを書いてその通りに動作するコードを書けばいいじゃん、という考え方。(本当はもっと奥深い
    • テストを書くメリットを知るには、何より体感したほうが手っ取り早いと思うので、ステップバイステップで実際にテストを書くこの本を勧める。なによりテスト駆動開発の原典だし。
  • 自分の得意な言語、Webフレームワークで、テストを書く方法を調べてみる。
    • 例えばPHPなら、PHPの初心者向けの本で、テストについて記述のある本を探す。PHPUnitというライブラリを使うのが定番。
    • 例えばLaravel(PHPのWebフレームワーク)を使ったことがあるなら、Laravelのマニュアルや本にはLaravelでのテストの書き方を説明した章が必ずある。
  • 日本におけるテスト駆動開発の第一人者、@t_wada さんによる解説資料を読み漁る。

レベル4. オブジェクト指向をさらに深く知る

これ以降は、目的に応じて細分化していく。

既存の汚いコードと戦う

コードは書いたら書きっぱなしじゃない、常に改善を繰り返していくものだ。設計についてもそうだ。複雑で手を出しにくい設計に修正を加えないといけない時、どう立ち向かうか?

オブジェクトを改めて捉え直す:ドメイン駆動設計

関数型プログラミング

普段使っている言語とは異なる言語思想と文法を持つプログラミング言語を学ぶことで、その考え方の良い点を設計手法に反映できる。特に関数型プログラミングと呼ばれる思想は、最近勃興してきたプログラミング言語の基礎(の一部)として採用されている。既存のPHPのようなプログラミング言語でも、関数型プログラミングのエッセンスを活かした設計手法が存在する。

  • Elmで関数型プログラミングを学ぶ
    • ElmはWebアプリケーションを作るための関数型プログラミング可能な言語。
    • 関数型プログラミングに必要な厳選された文法・機能を備えているので、関数型プログラミングの学習のとっかかりとして使える。
  • Haskellで関数型プログラミングを学ぶ

とりあえずこんなところ。

最後に

この記事を書いている人ももちろん勉強の道半ばです。自分が書くコードの設計についてレビューでガンガン指摘してもらったり、話し合ったりしたいです。オススメの資料があれば教えてください。宜しくお願いします。

マニュアルサイトを作ります。

WebClassの マニュアルサイト を作ることにしました。WebClassの中でも新機能開発が盛んな学習記録ビューアの解説を中心に、内容を充実させている真っ最中です。
作成の目的は以下のようなものです。

  • Google検索から使い方を調べられるようにしたい
  • Webの特性をフルに活かした効果的なマニュアルにしたい
  • ユーザだけでなく社内でも活用できる
  • アクセス履歴から製品の改善に役立つ情報を見つける

それぞれ説明していきます。

Google検索から使い方を調べられるようにしたい

これまでWebClassのマニュアルは主にPDFで用意し、WebClassにログインしてダウンロードしていただく形で提供してきました。現代において、アプリやサービスについて何か情報を得たい時は、とりあえずGoogle等の検索サイトで検索する事が多いのではないでしょうか。WebClassのユーザーも例外ではなかったかと思います。実際にWebClassの情報を検索すると、ヘビーユーザーのかたが使い方を分かりやくすまとめたサイトが見つかったりします(ありがとうございます!😊 )。私たちもマニュアルサイトを通して、必要な情報を必要な時に見つけることができるような状況を作ります。

Webの特性をフルに活かした効果的なマニュアルにしたい

前述したように、これまではマニュアルをPDFで配布してきました。これをWebサイト化することで、段違いの表現力を期待できます。分かりやすいように情報をページに分割したり、リンクで関連する情報を相互に結びつけることができます。動画やアニメーションGIFも強力な武器になるでしょう。

ユーザーだけでなく社内でも活用できる

社内で情報共有するための資料はありますが、マニュアルサイトのようにユーザーも含めた多数の人が参照する状況にすることで、より情報の鮮度を保つ原動力になります。ユーザがマニュアルサイトを見ることで必要な情報をが得られる状況になれば、サポートコスト低減にも繋がります。

アクセス履歴から製品の改善に役立つ情報を見つける

マニュアルサイトにアクセスしてきたユーザーは、WebClassの画面だけでは分からなかった情報を探しにやってきています。アクセスが多いページや検索ワードから、WebClsasで迷いがちなポイントを知り、WebClassの改善に繋げていきます。

今後

マニュアルサイトを構築したばかりで、目的の達成にはまだ時間がかかりそうです。徐々にではありますが、内容を充実させていき、即時性の高いサポートを目指していきます。

余談ですが、マニュアルサイトを公開したのと同じ頃、ヘルプサイトの作り方 なんて本が出版されていました!今読んでいますが、すぐに活かせそうです。

リリースの案内

こんにちは。福岡です。

本日 WebClass Ver.11.6.0 のパッチをリリースいたしました。ご利用いただいている学校の管理者の方には案内のメールを差し上げていっています。

リリースの時期はこれまで3月と9月だったのですが、次の学期の開始に間に合わなかったり、管理者や先生も変更点を確認する余裕もないタイミングでした。そこで時期を少し前にずらし、1月末と7月末に変更してスケジュールしています。この年2回のリリースは定期リリースのタイミングで、その時の状況により間のタイミングで追加の案内を差し上げることもあります。

また、管理者の方もユーザとしてご利用いただく先生や学生に向けて変更等の案内できるよう、案内資料を用意いただいているケースもあるかと思います。そこで今回から、パッチの案内をしているページでリリースノートのワードファイルと、パッチに組み込まれているマニュアルのPDFファイルをダウンロードできるようにいたしました。パッチを当てなくても先にマニュアルを確認したり、リリースノートも編集してお手元でご利用いただくことができます。

まだまだ素材としては荒いところもあるかと思いますが、ご利用いただきやすいように順次整えていきたいと思います。

リリースの準備

こんにちは。福岡です。WebClass の次のリリースは1月30日を予定しています。バージョン番号は11.6.0 です。

あと1週間ほどですので、現在はテストと見つけた問題の修正をして、整えているところです。アルバイトできてくれている学生さんも、土日も使ってどんどんテストをしてくれていて頼もしい限りです。

ただ、巷ではインフルエンザも流行っているようです。インフルエンザかどうかはわかりませんが調子を崩してしまったアルバイトの方も2名ほど。学校のテストも近づいてきているはずなので、しっかり食べて寝て、調子を整えて欲しいです。

事務所にはお菓子やジュースが置いてあり、好きなように食べることができます。ただ、糖質をとると吸収のためにビタミンを消費してしまいます。特に体調の悪い時はお菓子は我慢して、代わりにお腹と相談しながらチーズや豆腐、果物あたりを食べた方がいいですね。とりあえずチーズを買っておいておきます。

あれこれ忙しいかもしれませんが、ちょっとずつ工夫して自分の面倒もしっかり見てあげたらパフォーマンス良く仕事ができて、ちょっとでもいい製品に仕上げられると思います。