スキルアップツール2018-10-20プログラム設計は何のためにするのか?【有効な設計パターンも紹介】モノづくりTwitterFacebookHatenaプログラム設計は何のためにするの?良い設計はどうしたらできる?こんな疑問にお答えします。ネイチャーエンジニアの亀田です。僕は10年ほど会社員エンジニアを経験したのち、フリーランスとして独立して2年ほど経験しました。開発・運用コストを下げるために尽きます。・設計スキルを高めるにはをお伝えします。設計をする理由は、冒頭で伝えた通り、「開発・運用コストを下げるため」です。システムの開発・運用にかかるコスト=人件費=開発に掛かる時間つまり良い設計ができると、その分「開発に掛かる時間」が削減できるのです。具体的に削減できる時間は、以下の3点。・入力と出力のフォーマットを決める・システム内容の構成要素(登場人物)を決める・システム内の構成要素のインターフェースを定義するといった作業。見てみると、「決める」「定義する」といった作業ばかりです。設計で行なっていることは、開発に関する定義やルールを決める作業なのです。これを実装前に行うことで、実装中に考える作業を減らすことができます。この設計を軽んじた場合、どんなことが発生するか?例を2つ挙げます。設計を省いてコーディング作業を進めていると、あることに気が付きます。「あれ?ここの出力結果どういう形がいいのかな?」これを決めないと作業が進められないので、作業を中断しなくてはなりません。これはコーディングとは違う頭を使うことになります。場合によっては他の関係者と一緒に検討しなくてはなりません。いうのが頻発すると、作業効率は非常に悪くなります。設計されていなければ、当然ドキュメントはないし、実装ルールやインターフェースも実装者ごとにバラバラになります。なると、新規メンバーは各クラスやメソッドの実際の実装を追っていかなくてはなりません。その時点で、学習コストが高いです。いうシステムは例外や依存が多くなり、複雑化して影響範囲の把握がしにくくなります。「並列なクラスなのに、クラスごとにインターフェースが全然違う」などです。バグを発生させやすくなり、その対応などにもコストが掛かります。このような問題が発生しないように、適切な設計をすることが重要になります。特定の階層のクラスのインターフェースを共通化する設計にすれば、そのインターフェースを覚えればその「クラス群」の挙動の大枠が理解できます。新規メンバーも覚えることが減り、システムの理解がされやすい&途中参加しやすい、となります。役立つ設計手法・パターンシステム設計の考え方には、すでにある優秀な手法を使うのが有効です。以下で紹介する考え方は、色々なサービスに組み込まれて幅広く認知されています。その考え方を知っておくことで、システム設計の役立てましょう。オブジェクト指向システム構成を人間がイメージしやすい「モノ(=オブジェクト)」に例える考え方です。多くのプログラミング言語自体に取り込まれている考え方です。合わせて読みたいオブジェクト指向のメリットとは?【プログラミング設計に役立つ】MVCモデルシステムを「Model」「View」「Controller」の3つのパートに役割分担して考える手法です。システムの役割をシンプル化することによって、人による理解を促進します。先述した考え方は、大変優秀で便利な考え方ですが、形式的なことに捉われてしまうことがあります。「最新の手法はこうだから、システムをその形に変更しよう」など。そんな時は、「開発・運用コストを下げる」という目的を達成できるのか問いかけましょう。・その手法を取り入れることで、本当にコストは下がるのか?・変更するコストと、将来軽減されるコストを比較して、それは有効な手段なのか?・そもそも、現状の設計ではどんな課題があるのか?手法や技術を使うこと自体が目的にならないように注意です。Webやニュースでもてはやされている手法があったとしても、それはその事例の環境にマッチしただけかもしれないからです。どんなシステムを、誰が開発・運用するのかによっても、有効な手法は変わります。・システム運用におけるオペレーションには、どの程度の負担があるのか?・システムの更新頻度はどれくらいあるのか?・チーム開発?個人開発?自分たちの状況において開発スピードを上げるには、どんなアプローチをすべきなのかを考えましょう。設計スキルを高めるには設計力を上げるには、知識だけでなく、システム運用経験を積むことが重要です。経験を多く積まないと良いか悪いかの判断はできないのです。フリーランスの方で自サービスメインで生活している場合、自分以外の設計を運用する機会が少なくなりがち。スキルアップを考えている場合は、良さげな開発案件に携わって、他のシステムの設計を見るのも勉強になると思います。スキルの高い人ほど、1つの手法ややり方にはこだわらず、色々と試行錯誤をしている印象を受けます。ちなみに、僕も個人アプリを9本ほどリリースしていますが、アプリを出して運用する度に改善点に気が付き、次のアプリでは結構手を入れています。・設計力を上げるには、システム運用して、改善する経験を積もう一朝一夕では良い設計はできませんが、経験を積むことで開発コストが大幅に減る嬉しさが味わえます。積極的に設計経験を積んでいきましょう!この記事があなたのお役に立てば嬉しいです。恭平@ネイチャーエンジニア全国各地で観察した生き物たちの魅力を、アプリやブログなどで発信中。今まで出会った動植物は「4,500種」以上。仕事スキルアップフリーランス開発お金ツールはてなブログをはじめよう!kkamedevさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。