Drupalでシステム開発と保守をしてきた所感


はじめに

2016/04現在、Drupal歴1年弱。
Drupalでシステム開発(見積り/設計/製造/試験/リリース)と保守をしてきた。
あくまでも経験則、所感のため参考程度に見てもらえばと思う。
尚、本投稿は随時更新していく。

各工程での所感・コツなど

見積り

Drupalに限った話ではないが、
機能 と 工数、それに加えて見積り時点で
想定していることがあれば記載しておく。

  • Drupalのバージョンはどれか
  • ディストリビューションを使うのか
  • どのAPIを使うのか
  • どのモジュールを組み合わせて実現するのか
  • どの外部サービスを使う想定か

など。

設計

基本設計、詳細設計

Drupalだからこう書く!みたなテクニックはあまりない気がする。
ただ、設計するにあたり以下のような考え方は必要そう。

1.Drupalの標準機能で実現できるか
2.モジュールで実現できるか、画面からの設定のみで実現できるか
3.hookで実現できるか、どのhookを使うのか
4.既存モジュールのソースを改修して実現できるか1
5.モジュール + 画面からの設定 + hookによるふるまいの変更 で実現できるか

また、Drupalやディストリビューションモジュールの機能仕様ベースでの
仕様になる点は明記すべきだと思う。
(※自前で作りこむ場合は不要)

機能実現するにあたり、Drupalエバンジェリスト級のエンジニアでない限り、
使うモジュールの調査を必ず行う必要がある。
調査を行っていく中で、機能実現できていたりする。
つまり、調査 ≒ 製造 に近い部分がある。

製造

以下があると便利。

  • EclipseなどのIDE。Sublime Text
  • XDebug
  • Develモジュール
    • 一昔前まではEclipseでブレークポイントを貼ってステップ実行をしていたが、dpm/dpqがあれば事足りる
  • Examples for Developersモジュールが参考になる

  • コマンドからDrupalを操作できるDrushもあると尚良。

  • リアルタイムでログを確認できるWatdhdog Liveも地味に便利

試験

ブラックボックス

  • 一般的なWeb系のシステムと同様に、画面を打鍵する。
  • もちろん、Seleniumも利用可
  • Develという開発用モジュールを使うと、コンテンツノやユーザなどのダミーデータを 自動生成してくれるため、若干便利。

ホワイトボックス

Drupalでの経験はなし。
ここ とか ここに情報があるので
参考にするとよさげ。

品質判定

うーん。難しいところ。
Drupalの標準機能は信頼してあげてもよい気がするが、

自前でコーディング+Drupal標準機能 あるいは サードパーティ製のモジュールによって実現した機能

上記のような場合、どうだろう。

自前でコーディングした部分は数行でも、
同値・境界値やバリエーションを考慮して、
しっかり網羅して品質を担保してあげる必要が当然ある。

すると、規模(ステップ数)の割に、試験項目数が多すぎる、
またはバグ数が少なすぎるということが起こり得る。

リリース

  • モジュール/ソースの配置
  • モジュールの有効化
  • 画面からの設定(極力、import/exportで対応する)

リリース時はメンテナンスモードをONにして、
administrator権限のアカウントのみログイン出来るようにしておく。

保守

  • 運用チームより改善要望
  • Drupalのバージョンアップ/セキュリティフィックス
  • モジュールのバージョンアップ/セキュリティフィックス
  • 上記反映後のリグレッションテスト および リリース

バージョンアップやセキュリティフィックスを知る方法として、以下がある。

  • Drupal標準機能を使う
  • Security advisoriesを確認する(RSS、メーリングリスト有り)
  • Twitter(‎@drupalsecurity)をフォローする(メーリングリストより早い)

最後に

  • Drupalを使う前提条件だけで工数が浮く(学習コストは高い)
    • 認証機能やユーザ登録機能、コンテンツ管理機能が既に存在するため
    • 要件を満たせるモジュールがあれば、コーディングなしで機能実現できる場合もある
    • 従来のWebアプリケーションフレームワークとはまったく使い勝手が異なる
  • おおきな仕様変更は弱そう
    • API(フック)による実装
    • モジュールと画面からの設定が絡みあう
  • コントリビュートモジュールを改修する際は、調査時間を多めに見積もる
  • 差分バックアップ&リストアは、データモデル的にキツそう
  • コンテンツタイプに対するインポート/エクスポートは、運用上できるようにすべき!
  • Drupalは大規模開発でもイケる聞いたことがあるが、どちらかと言うとイテレーション開発で中小規模のシステムの方が向いていると思う
  • コントリビュートモジュールを有効にすると、どのURLが有効になるか把握すること
    • 不要な画面はアクセスできないよう設定が必要
    • Workflowモジュールであれば、/workflow や /workflow/summary 等が有効になる

  1. モジュールをバージョンアップする際に改修したロジックを上書きする恐れがあるため、運用を考慮すること