コラム
Next Read のシステム開発 Vol.2
ネクストリードのプリンシパルアーキテクト&デベロッパー、奈須です。
Vol.1 ではネクストリードとしてのシステム開発について書いてきました。この Vol.2では、私個人の体感や見解を踏まえて書きたいと思います。
■クリーンアーキテクチャ
今でこそクリーンアーキテクチャを採用していますが、元々これには懐疑派でした。
少し試した限りだと従来型開発に比べてソースコードの記述量が飛躍的に増大します。※体感的に 5~7 割程度増加
使い始めた時はこの形式になかなか慣れることができず、単純に開発工数が増大する方法はどうなのかと思っていたくらいです。
作って納品して終わりというケースがほとんどの従来型開発において、この設計は単純に開発コストが増大するだけでメリットもないように見えます。
「開発後の改修・メンテコストなんて知らない」というスタンスであれば、クリーンアーキテクチャの採用はナシとしか言いようがありません。
■実際に使ってみて
それでも一度取り入れて数年にわたる長期アクティブ保守を行ってみると、その力に気付かされることになります。
まず、構造が決まっているので、修正を加えるときにどこに手を加えたらよいか悩まなくて済むのです。
慣れていくと、とある機能の CRUD をバリデーション込みで実装しても途中で動作確認することなくソースコードを一気に書き上げて最後にはそのままエラーもなく動くということが多くなってきました。
エラーがあったとしても軽微なものが多く、この恩恵を感じています。
もっとも、使用している C# の特性上、文法エラーは真っ先に画面に出ますので、そもそもそういったことが起こらない状態を作れていることも大きいです。
機能の修正も、修正内容から「だいたいこの辺りに書かれているはずだ」というアタリをつけるのが簡単になり、やはり改修コストが下がっているなと感じています。
また、改修していくうえで「ここの設計が甘かったな」と思うことがあると、そこはやっぱり「クリーンアーキテクチャを崩した部分」なのです。
甘かった設計を突き詰めていくと、クリーンアーキテクチャに近づけることが最適解だという答えに近づいてしまいます。
こうなってくると、懐疑派だった自分もこの設計が良いのだと認めざるを得ません。
■プロアクティブ保守とリアクティブ保守
これは私が勝手にそう思っているだけで一般的な用語ではありません。
私の中では以下のように定義しています。
【プロアクティブ保守】
故障や不良の原因となる要因を予め除去しておくことで信頼性を高める手法を取り入れた保守です。
こちらはハードウェアの分野だとまだ耳なじみがあるかもしれません。
これをソフトウェアにも展開し、常にソースコードを整頓しておくことで将来的な不具合の混入や発生を未然に防止します。
これには各種ライブラリのバージョンアップ等も含みます。
【リアクティブ保守】
従来型の保守です。
何もなければ何もしない、不具合が発生したらその時に初めて対応、見積もり等をするといった形をとります。
作って終わりならリアクティブ保守でもよいのですが、その場合はある日突然、「ライブラリのサポート期限が切れそうだ」という話をされて追加費用なり受入テストなりといった負担が一時期に集中して発生します。
負担を避けるためにサポート期限切れのまま使われることも多く、セキュリティの脆弱性があってもそのまま運用されてしまいリプレースするにも年月が経ちすぎてどうしようもないといった状態になります。
これは大きな技術的負債となり、返済するにも莫大なコストが必要となっていきます。
そういったことに未然に対応していくのがプロアクティブ保守です。
ライブラリも常に最新化され、セキュリティリスクを大きく抑えることができます。
そもそも故障が起きにくいようにしていくため、何かが起こるリスクが少なくなります。
■ネクストリードの顧客並走型開発「クラウド秘密基地™」
私は常日頃から受託開発を行っていましたが、開発して納品したら保守費用を最低限に下げるという従来型の開発では限界を感じていました。
そもそも、「エンジニアの私が、自分の欲しいと思ったシステムを、私自身で作った」としても作り終えたものには「なんか違うな」とか「ここはこうじゃなかったな」とか「ここはこうしたほうがもっと良くなるのにな」という部分が必ず発生します。
プロでもこういった状態なので、全ての要件定義をしてから一気に大きなシステムを作り上げるというのは相当に難易度の高いものなのです。
要件についても、実際に使ってみてから間違いに気づいたり、もっと別の要求もあったことに気付いたりするでしょう。
本当にお客様が満足する、生きたシステム開発ができる環境の選択肢は、従来では「自社開発」のみです。
また日本特有の事情として、優れた IT エンジニアはユーザー企業になかなか就職しないという実情があります。
そういう状況下ではユーザー企業が自社開発を行う土壌を作るだけでも数年単位、そしてかなりの投資が必要となります。
そのギャップを埋めるべくネクストリードが実施しているのが顧客並走型開発です。
「クラウド秘密基地™」という形で提供し、顧客固有の環境や課題を理解しながら開発を進めています。
短期的な視点だけではなく、中長期的な視点も必要になります。
これらをうまく実現できるのが「クリーンアーキテクチャ」+「ドメイン駆動」+「プロアクティブ保守」というアーキテクチャだと考えています。
■まとめ
今日ご紹介したようなアーキテクチャを深く理解・実現し、エンタープライズ領域で展開している企業はまだまだ希少だと思っています。変化の激しい時代を生きるお客様のことを徹底的に考えるネクストリードだからこそ実現する、「顧客並走型」の「クラウドネイティブ開発」+希少なアーキテクチャによる技術スタックをどんどん強化し、先行していくことで、開発の観点からもお客様のお役に立ちたいと考えています。
【関連記事】
・Next Read のシステム開発 Vol.1
https://nextread.co.jp/column-casestudy/dev-insights1/
・「秘密基地」の具体
https://nextread.co.jp/column-casestudy/002/