開発覚書はてな版

個人的な開発関連の備忘録

【雑談】開発時の考え方など

目次

概要

たまにですが、開発時にどういうことを注意しているかや何故Githubソースコードを公開しているかを聞かれることがあります。
現時点で回答している内容を記載していこうと思います。

開発の優先順位

基本的には 顧客満足度 >技術 です。
お金をもらって開発をしているので顧客に価値を提供するのは当たり前です。
その中でどれだけ良いものを作れるかをテーマに開発をしています。
QCDS的に一時的に妥協して歯がゆい時もありますが、次はやってやるぞ精神で対応しています。

コーディングスタイル

現場やプロジェクトにもよりますが、以下の優先順位でスタイルを変更します。

  1. 現場・プロジェクトのコーディング規約
  2. 公式が提唱しているコーディング標準やパターン
  3. ユーザーグループ・その技術の著名人が提唱しているコーディング標準やパターン
  4. 他言語や類似ケースでのコーディング標準やパターン

過去のプロジェクトのパターンは参考にはしますが、パターンのメリット・デメリットが説明できないケースもあるのでそのまま採用するのは少ないです。
公式などが提唱しているものについてを説明するのは、エビデンス的にも分かりやすいので周りの人にも理解されやすいです。

私がプロジェクトで標準を決める場合は現場独自のルールは作らず、公式やユーザーグループなどが提唱しているものを採用しています。(会社の慣例的に残っている基準などがある場合は除く)
最近はLintやフォーマッターも充実しているので、スタイルはツール任せにするケースもあります。
また、ツールや標準なども流動的なので、現時点でベターな選択をしておき標準が変わってきたらアップデートすることを心がけています。

設計・開発のスタイル

難しいコードを極力簡単なコードにすることを心がけています。
設計についても機能間の依存度を極力無くしてシンプルな設計になることを心がけています。

メタプログラミング、DI、AOPコンポーネント指向、オブジェクト指向、各種デザインパターンなどを使いつつ、コーディング量を減らせるよう工夫します。
コーディング量が増えれば増えるほどバグの可能性が上がるので、コーディング量を減らせるなら極力減らすのが良いかと考えています。

オープンソース活動・Githubについて

業務に関係がなく、標準的に使えそうなコードについてはGithubに公開して別プロジェクトでも使えるようにしています。
また、オープンソースで足りない機能で自分が使いたいものについてはPullRequestを投げるようにしています。
Jenkinsではプラグインの公開やプラグインの翻訳などを行い、自分の使いたいプラグインについては充実させてきました。

使用技術の選定

システムを長期期間運用することを考えると以下の点をベースに選定します。

  • 業界内のシェア
  • サポート期間
  • メンバーのスキル

新技術について

PoCや技術検証案件なら新技術をガンガン採用します。
また、興味のある新技術については家で遊んだりします。

行動パターン

  • 技術系で解決できそうなものは積極的に行動
  • CI, CDなどで守りを固めて攻めの実装
  • 管理・調整・設計より実装をやりたい
  • 計画・レビューなどの要所は締め、道中はゆるく

基本的には行動できる範囲内で最善を尽くす感じです。
チーム状況などで出来る範囲は限られますが・・・

あとがき

チームに入るときや飲み会・勉強会などで結構聞かれることが多いのでまとめてみました。
数年後は回答内容が変わるものと変わらないものが出てくると思いますが、それはそれで楽しみです。