CodeIQ MAGAZINECodeIQ MAGAZINE

CodeIQ MAGAZINECodeIQ MAGAZINE

湿った場所を徹底的に乾かす。システム開発の「DRYとWET」とは? #dry

2015.01.23 Category:エンジニアコラム Tag: ,

  • このエントリーをはてなブックマークに追加
20150122_tbpgr

システム開発とは切っても切り離せない「DRY」の話です。
以下の順に説明します。

・ DRYとWETとは?
・ リファクタリングとDRY
・ ナレッジマネジメントとDRY
by tbpgr

DRYとWETとは?

DRYとは?

“Don’t repeat yourself” の略で
「同じことを繰り返すな」という意味です。

DRYはソースコードに関する話題で登場する機会が多いですが、

  • 冗長なドキュメント
  • 冗長なワークフロー
  • 冗長なコミュニケーション

など多くの分野や、

  • 個人のDRY
  • チームのDRY
  • 世界のDRY

など多くの範囲まで関わる重要な概念です。

今まで手でやっていたことをシステムによって自動・効率化し、
人間にしかできないクリエイティブなタスクに集中できるようにする、
といったように、DRYはシステム開発の目的の一つでもあります。

蛇足ですが、システム開発のコンテキストで「DRYな人」といった場合、

重複を許さない職人

といった、ポジティブなニュアンスが強いのに対して、
一般的なコンテキストで「DRYな人」と言った場合、

理知的かつ冷静だが感情が希薄

のように、うって変わってネガティブなイメージになるのは面白いですね。

WETとは?

“Write everything twice” の略。
(”We enjoy typing” という皮肉めいた意味もあります)
「同じことを繰り返すな」ということです。

DRY(乾いた)とWET(湿った) という対比になっており、
非常にイメージしやすく、覚えやすい良くできたメタファです。

いつDRYにするか?

慣れてくると、意識せずともDRYに振る舞うことができるようになりますが、
初めのうちは難しいものです。

初心者の方は、下記のようなルールに基づいて行動するとよいでしょう

  • 2回繰り返したらDRYにせよ

言い換えると

  • WETならばDRYにせよ

自分だけに分かるようなメタファにして悦に浸るなら

  • 濡れたら拭く

です。

意識できるまでは、 「 DRY 」 と大きく書いた付箋をディスプレイの目に見える位置に貼っておくのもよいでしょう。

┌─────────────────────────────
┤○ Don’t Repeat Yourself
└─────────────────────────────

ラバーダッキング の手法のように、目に見えるものを活用することで、
「 DRY 」と書いた紙が記憶を呼び起こすトリガーの役割を果たします。

副次的な効果として、DRYを知らない同僚が「 DRY 」と書いた付箋を見つけた際に、

「DRY?それなに?」

と聞いてくるかもしれません。
DRYに関する情報をチーム内に押しつけることなく広めるチャンスです。

振り返り ( Retrospectives )

DRYをWETにするためには、 振り返りが効果的 です。
振り返りを仕組みに取り入れるには以下のような手法があります。

  • ポモドーロ・テクニック

時間を短く区切り、集中と休憩を繰り返すことで、
集中し、高い生産性を保つための手法
です。

タスクを細かく分割することによって、
細かく休憩をとることになるため、
結果として振り返りのタイミングが多くなります。

つまり、WETになってしまっていることに気付くチャンスが増えます。

  • KPT

KPTとは振り返りによる改善手法のことです。
K , P , T それぞれには下記のような意味があります。

K : Keep : よかったこと
P : Problem : 悪かったこと
T : Try : 次に試すこと

ホワイトボードを三分割し、
KPT それぞれの内容を書き出します。
任意の期間で振り返りを繰り返します。
(1週間単位ぐらいでの運用例が多いようです)

KPTは個人・チームどちらでも有効な手法です。

リファクタリングとDRY

リファクタリングとは?

リファクタリングは外部から見た振る舞いを変えずに内部構造の保守性、可読性、拡張性などを改良する手法です。

リファクタリングとDRY

リファクタリングは修正すべきコードの臭いに対応します。
コードの臭いの多くは冗長性、つまりWETが関わっています。

  • 冗長な処理をメソッド化し、共通化する
  • 複数の子クラスに存在する重複処理を親クラスに移動する
  • ハードコーディングされた文字列リテラルを定数化する

などのように。

ナレッジマネジメントとDRY

暗黙知はWET

各開発者の知識が暗黙化されていると、

  • ことあるごとに情報を持っている人に聞きに行く
  • ことあるごとに情報を持っている人を探し回る
  • 情報がみつからずに再調査する
  • 情報を持っている人がすぐ近くにいるが気付かない

といったことになります。

情報を可視化・整理しておけば不要だったはずの
繰り返しをしていることになります。

暗黙知の可視化をサポートするサービス

ナレッジ共有によって、組織の暗黙知を可視化にしてくれるサービスには以下のようなものがあります。

  • Qiita:Team
  • esa.io
  • DocBase

現状まだ情報量の少ない esa.ioDocBase に絞って簡単に紹介します。
どのサービスも共通で提供している機能については割愛します。

esa.io

esa.io は「情報を育てる」という視点で作られた、
小さな開発チームのためのドキュメント共有サービスです。
esa.io の主な特徴は以下です。

  • カテゴライズが容易
    • 記事タイトルをスラッシュ区切りにするだけでカテゴライズ
  • WIP投稿
    • 生煮え上等。公開を迷うくらいならとりあえずWIPで記事化
    • WIPの記事は外部ツールへのNotification対象外になってくれる
  • ゆるい雰囲気
    • 楽しさでナレッジ共有の敷居を下げる
  • 使い易いUI
  • ドッグフーディングによるエンジニア目線の使い勝手の良い機能
    • 投稿テンプレート
    • ショートカットアクセス機能
    • サジェスト機能
  • スライドショー機能
    • 書いた記事をそのままスライドショーとして閲覧可能
  • 非常に早いフィードバック
    • ユーザーからの要望を素早くシステムに反映
      • 短期実装が可能であれば即日~数日で機能追加されることが多々ある

DocBase

DocBase は小さなメモから始めて、チームを育てる情報共有サービス、です。 DocBase の主な特徴は以下です。

  • 堅めの雰囲気
  • 記事ではなくメモ、という単位にすることでナレッジ共有の敷居を下げる
    • タイトル欄にURLを入力するだけでメモを作成可能
  • 複数組織での利用を想定
  • 所属プロジェクトごとのパーミッション管理機能
  • Chrome Extensionを利用したブラウザ連携
  • メモ間の関連機能(メモAにメモBを埋め込んだりできる。部分テンプレ-トっぽい使い方ができる)
  • 早いフィードバック
    • 現状、esa.ioほどではないものの、他のWebサービスに比べれば比較的柔軟で早いフィードバックを行っています

esa.ioDocBase のどっちを選ぶ?

組織・チーム連携やパーミッションの管理などが必要であれば、DocBase。
esa.ioだとゆるふわ過ぎて、社内の稟議を通せない。カジュアルよりもフォーマルを好む環境なら、DocBase。
その他のケースならesa.ioを選ぶのが現時点での筆者のおすすめです。

暗黙知の可視化の向こう側

暗黙知を可視化することで、
リモートワークを円滑にする要件をひとつ満たすことになります。
リモートワークという選択肢を持つ際の助けになるでしょう。

おまけ

esa.io で個人ナレッジの管理

私は個人でesa.ioを利用しています。
個人の情報もesa.ioで管理しておくことで、

  • 複数端末でナレッジを管理できる
  • Markdownで記述可能なメモ帳として使える
  • esa.ioの豊富で使いやすい機能でナレッジ管理の負担を減らす
  • 外部公開するスライドを低コストで作成、公開できる

などが可能になり、便利です。

私生活でも多くの開発をしたり、インプット・アウトプットが多い方は、
検討してみてはいかがでしょうか?

Pricing

esa.io は 1 User 単位のライセンス ( 500 円 / 月 ※ 2ヶ月の無料試用期間付) です。
Export 機能もついているので、利用を取りやめる際も他サービスへの移行を円滑に行うことができます。

Qiita:Team, DocBaseは3Userからのライセンスが基本なので
1人で使う場合はesa.ioがお得です。

※ DocBaseは現時点( 2015/01/20 )ではβ版であり、無料です。 2015年中に有料化予定。

  • このエントリーをはてなブックマークに追加

■この記事を書いた人

avatar

tbpgr

CodeIQでRubyや様々なカテゴリの問題を出題中。 通常問題 バッジ問題 デスマコロシアム問題 Twitter:@tbpgr Tbpgr Personal Page: http://tbpgr.github.io/

■関連記事

新着記事

週間ランキング

今週のPickUPレポート

CodeIQとは

CodeIQ(コードアイキュー)とは、自分の実力を知りたいITエンジニア向けの、実務スキル評価サービスです。

CodeIQご利用にあたって
関連サイト
codeiq

リクルートグループサイトへ