Through the kaleidscope

プログラミングとかシステム開発とか諸々の思考場所

企業はプログラマを育てるべきか

medium.com

ソニックガーデンの倉貫さんのエントリが話題になってました。そこからMedium上でのやり取りを見て感じたことを書きます。

倉貫さんの主張

タイトルは「量産的」だの「撲滅」だの刺激的ワードがあり、そこに反応する人もいたようです。しかし主張としては以下に集約できるでしょう。

  • 即戦力を求めるあまり、逆に地力の無いプログラマが増えている
  • できないプログラマを使って、システム開発が滞りなく進むのか
  • 時間がかかっても基礎をちゃんと教える教育を行う必要がある

プログラマの教育をしっかりやって、出来ないプログラマが淘汰されるようにしないといけないということですね。成果を与えられる側のユーザにとって、出来ないプログラマたちが作り上げたシステムに価値を置くかどうか?を考えると、至極もっともな結論です。

育てることの問題

ただ育てるとはいえ、今の企業がそういった基礎をみっちり身につけるような教育を施せるかというと疑問が残ります。企業の教育と言っても大抵が新人たちに対する3~4ヶ月ほどの新人教育とそこからのOJTで現場で経験を積む流れです。

キャリアの初めの数ヶ月のみの教育で優れたプログラマを生み出せというのは酷な話です。というか不可能です。その時点で優れたプログラマであっても、日進月歩で新しい技術の話が流れてくるこの業界で、必要な技術を都度キャッチアップできないと、以後40年近く続く自身のキャリアを全うすることは出来ないでしょう。

僕自身の新人たちの教育に携わったことがあります。いくら本を読ませコードを書かせてレビューをして正しい書き方を教えたとしても、適性がない人ややる気の無いような人は伸びません。僕の考えとしては、技術者が伸びるためには常日頃の個人の努力が不可欠である、ということです。

技能は個人に宿る

プログラマ個人の側で考えてみます。今の時代、ひとつの会社で勤め上げるというのはかなりのレアケースではないかと思います。いつ倒産するか分からないし、自分のいる会社の事業内容がいつ時代遅れになりジリ貧になるかも分からない。人にもよりますが、数年いればもう飽きてしまって他の会社に転職したくなる人もいるでしょう。もうその会社のためだけに技術を学ぶというやり方だと、年を取ったときに行き詰まる可能性があります。だからこそ、プログラマは学び続けなればいけないということが言われています。*1

プログラマ自身が何を学び、何を伸ばすのかというのを、好みや市場のニーズにあわせて自身のキャリアを積み上げていく姿が、僕にとっての理想的な姿です。企業は単なる数あわせでリソースを補充するのではなく、技能を持った質の高いプログラマを優先的に採るようにするのが健全ではないでしょうか。一方でプログラマは己自身で技能を磨きそれをアピールする必要があります。

問題点

勝手に僕の理想的なことを書きましたが問題点はあります。

まず新人を採るメリットが薄くなることでしょう。老齢になっても働くことを要求される社会になりつつありますので、新人を採るよりも即戦力の65歳を採用するほうをとる企業もあるかもしれません。新卒の時点で、すでに十分なキャリアを持つプログラマたちと同じ土俵に立つことは不利なのは明白です。

それを承知の上で新人を採用して教育するのが従来のスタイルでした。もしかすると新卒一括採用とともにそういったスタイルが見直されるのかもしれませんね。

*1:それが好きでできるならいいですが、強迫観念になってしまうといささか不健康な気もしますが、また別の機会に書きます

不惑目前にしてギークであることを諦める話

crapp.hatenablog.com

この記事を読んで思ったのが、まず第一に羨ましさであり、同時に妬ましさであると正直に言いましょう。要は嫉妬ですね、男の嫉妬は見苦しいらしいです。

まず羨ましいと思うための前提として、僕も、

  • コーディングが早く、
  • 様々な技術に造詣があり、
  • 問題に対して的確な解決法を即座に導き、
  • 難しい仕様についても理解が早く、

というようなスーパーマンのような「ギーク」にずっとなりたいと思っておりました。

しかしなれなかった。それは一つ前の記事でも書いたようにキャリアの積み方に失敗したのもありますし、これは残酷な現実なんですが、

僕がギークになりたい理由は、自己承認欲求を満たすためであった

ことに気がついてしまいました。

なかなか認めたくない現実ですが、認めます。ギークという肩書を得てチヤホヤされたかったのだなと。だからこそ休日に我を忘れてコーディングなんて出来なかったし、ホッテントリであがってくる技術記事を読んだだけで出来た気になっておりました。憧れているくせに実行されないとしたらそもそもその憧れの本質は別のところにあります。ようやくそれに気が付きました。

今日は実は私の39歳の誕生日なんですね。あと一年で不惑です。言い訳しても未来を見据える若い子たちからしたらおっさんなんでおっさんらしく生きていきたいと慎ましくなる次第です。

さあ、ギークを諦めてどう生きていくのか?それは、自分がギーク半人前ということを自覚し、それでも技術のキャッチアップを進める他ありません。別に自分自身の技術力がカスということは思ってません。最高峰の憧れのギークの面々には到底叶いませんが、プログラマピラミッドを構築した場合にトップ20%くらいにはいられるくらいはあるだろうと思っています。(前職で一緒に仕事をした人やお客様からいろいろお褒めのお言葉をもらったことから、それまで自分が思っていた自分は技術的にカスというフィルタを取り除くことが出来ました)

なので、自分が生きる道は、Googleで高度技術を駆使する仕事とか、技術ベンチャーに行って超フルスタックエンジニアとして働くのではなく、人様の役に立つために今持っているそこそこの技術を最大限使える場所を見つけることでありましょう。簡単とは思いませんが、そういう自由を手に入れるためにフリーランスになったわけですし、今年はいろいろとチャレンジしてそういった活躍の場を探していきたいと考えております。

主に自分ができるのは、Androidのアプリ開発や、Webアプリケーション開発なんで、そういった方向なら応用は効きやすそうですね。ただ僕はそろそろ自身がメインプレーヤーになるのではなく、次代のプレーヤーに託す、継承するステップにもいるのかなと思うことが増えました。なので教育の分野にも興味があります。まあ不惑まであと一年といえども、40になって道がはっきり見えるわけではないですし、人生通じて模索していきたいです。

で、冒頭のブログの筆者に対しては、せめてそういう場に行けたのだから卑屈になる必要はないと思いますよ。元SIerということは採用側も分かっておられたでしょうから、逆にギークの視点では気づけないようなことを指摘できるような技術者であることを求められたのかなとも感じます。そもそもなんですが、完璧な人間なんていないです。人間どこかに欠点があるし、チームや組織なんて不確実性を持つ人間の相互作用なんですから、スキルの有無のみで自分を責めるのはやめましょう。(とはいえ、技術職である以上、一定以上のスキルは必要でしょうが、少なくとも筆者から感じる能力であればそこまで不足はなさそうに思いますが)

彼方昔のフリーランス一回戦

この記事は、フリーランス残酷物語 Advent Calendar 2016の20日目です。

ひとつ前の記事では僕が今年フリーランスになった経緯を書きました。そこでも言及したようにフリーランスになったのはこれが二度目で、実は2009年秋冬ごろにフリーランスとして活動していた期間が少しあります。それはもう残酷な失敗でありました。

フリーになるまで

一度目のフリーランスになるまでを簡単に振り返りましょう。

病気

新卒の会社で働きだしてから、僕はすぐにメンタルを病んでしまいます。過労と人間関係が原因であと少し勇気があれば逝ってました。今ではほぼ完治しており冷静に振り返ると様々な局面で合理的な思考が出来ていなかったなと感じます。

今思い返してもひどいもので、「休職を繰り返す、退職する、うつ病を隠して転職活動、転職するものの仕事が厳しくてうつ状態がひどくなり休職」これのループが続きます。

地元へ

そんな真っ暗闇の中、とある女性と結婚するため、地元に帰ることになりました。はじめはヒモっぽい生活してましたが、働けという嫁さんに抗えず、どうにか職を見つけますが長続きしません。ただでさえ不自由や理不尽に我慢ができない自分が、うつと闘いながらそれを許容するなど到底無理ゲーです。うつ病患者と初めて接する嫁さんと事あるごとに衝突し、娘が生まれたというのに全然幸福感はありませんでした。

決意

ある会社を辞めた後、もう自分は会社員として働くのは無理だという結論に達しました。履歴書は会社の遍歴が多すぎて汚れてしまったし、年も30を超えてしまった、しかも鬱持ちである。嘘をつかないと会社に入れてもらえないだろう、そして例え入れてくれたとしても、その会社にきっと絶望する日が来る、そう考えると、会社員として行きていくことは諦めたほうが精神衛生上いいのではと考えたのです。

そしてその時僕はフリーランスプログラマとして、生まれ変わろうと決意したのであります。

なにか順番が逆な気がしますが、その時僕は病気について一生治らないものと決めてかかっており、いかに両立させながら生きていくかにフォーカスが当たっておりました。

フリーになってから

最後の会社を休職期間切れにより退職することになってから、僕は離職票は机の中にしまって、そのままフリーランスとして活動することになります。

コネ

さあ、あこがれのフリーランスです。さあ、、、何をしよう?

フリーランスなんて宣言すれば誰だってなれます。難しいのは仕事を見つけることです。当時の僕はどうやって仕事を取ってくればいいか皆目検討がつきませんでした。リアルな知り合いなどほとんどいないため、ネット上の知り合いにそれとなく「仕事ないですか?」と聞いてみますが、そうそう都合よく仕事にありつけません。

コネという言葉にネガティブなイメージを持っていましたが、コネって大事なんだと気づいたのがその時です。

初仕事

そんな中、あるオレンジ色の求人サイトで業務委託の募集を見つけることができました。なんという幸運。業務委託と言っても案件ベースではなく、時給ベースです。確かコンビニバイトよりは割高なくらいの金額でした。それでも、がんばれば昇給するし、継続的なお仕事を約束しますよということだったので、相手の言うがままに契約をしました。

その会社相手に3ヶ月の間にふたつほどの案件をこなしました。コミュニケーション面で少し支障をきたすことはあったものの、仕様どおり動くものを無事に納品できました。ただ、3ヶ月の間の実稼働時間にすると1.5月程度で金額にすると、月あたり10数万円です。

フリーランスは会社員時代の給料の3倍は稼がないといけないという忠告を見ます。それと比べると僕が稼いた金額は微々たるもので一ヶ月の生活費にも足りません。嫁さんは赤ちゃんの育児のためすでに婚前から働いていた会社を辞しており、僕の収入にすべてがかかっています。こんな金額ではとても生活していけない!

しょうがないので家にある不用な物品をヤフオクで売りさばきました。独身時代に集めたレアなキーボードやPCパーツは全部売りました。嫁さんのもう使わない服やカバンも全部売りました。断捨離というとかっこいいですが、ただの生活費捻出です。とはいえ、落札があるたびに僕自身の鬱気分は幾分か和らいだので、当時の僕に悲壮感はあまりありませんでした。

見積

時給ベースのお仕事ではやっていけないのと、案件が途切れると一気に窮するため、並行して他の仕事を見つけることにしました。するとまた同じオレンジ色の転職サイトで、受託案件を請けてくれる人の募集を見つけました。すぐに応募して面接に行くと、担当の方が「すぐには案件がおろせないが、例えばこういうのを作ってくれとなった場合の見積を出してみて欲しい」と依頼してきたので見積もってみることになりました。

そこで僕は初めて見積をします。要件は確か単純なPHPのフォームだったと思います。サーバ側処理だけでなく、HTML+CSSも書く必要がありました。そんなにこじゃれたものじゃなくても良いとのことでしたが、僕にとってはPHPは少しは知ってましたが、フロントエンドは未知の世界です。勉強する時間は請求しないとして、どれくらい時間がかかるかを予想し、自分の給料換算してそれに3-4倍した金額を伝えました。

お代100万円と報告しました。「なるほど……」という回答をもらってから、一切の連絡が途絶えました。

終了

生活費は火の車で、もう借金しないといけない水準まで来ておりました。受託案件だけなんて悠長なことは言っていられません。転職サイトだけでなくハローワークにも通い、正社員でもバイトでもいいから何かしらの仕事を見つける必要がありました。こだわりを捨てた結果、短期ではありますが契約社員のお仕事に縁があり、2つの案件をこなしただけで一回目のフリーランス活動は終わりとなったわけです。*1

敗因

さて、一回目のフリーランス活動は惨敗でした。1安打完封負けです。何がいけなかったのでしょうか?

当時の私は、自身の本当の実力がよく分かっていませんでした。当時は過度に自己評価が低く、何も出来ないんじゃないかという恐れを持って案件を探していました。フラットに客観的に自身の技術力やスキルを把握していないと、アピールもできないし、今回は無かったですが案件とスキルのミスマッチで多大な損失、迷惑をかける可能性もあります。

単価設定についても自分の適正な値付けが分かっていれば、極端に高い見積もりで失注したり、自分を安売りして苦しむこともなかったでしょう。

また仕事を見つけるのになぜかネットばかり見ていました。同じフリーランスの方々との交流も特に行いませんでした。しないというより対人恐怖症によりできないと言う方が正確ですね。フリーの人のブログとか読むと、仕事はたいてい知り合いや元職場などの縁から来ることが多いと書いてあります。ネット上のマーケティングを否定はしませんが、ネット上の知名度を確立するまでに地道に仕事をするべきでそれは今までの仕事の延長線上にあるのだと思います。*2

あとは精神的な病気ですね。今思い返しても合理的判断があそこまでできないものかとびっくりしてますし、これは性格的なものも起因してますが人と接することを異常に恐れていたんですね。健康がフリーランスになるための絶対条件です。

まとめ

結局のところ一回目のフリーランスは「社会から脱落した奴が、未知の世界に準備不足で飛び込んで溺れ死にかけた」の一言で表現できるのではないかと思います。*3

そんな私でも契約社員後の二社で病気の治癒と、プログラマとしてのお仕事についてそこそこの自信を得られるくらいになりました。再起したとようやく言えるのかなと。前職で技術的なリーダーを任されたり、コミュ障と言ってよかった自分がお客さん相手に要件定義したり、チームをまとめるマネジメントをやったりして、いろいろな経験を積むことで過去の自分をどうにか払拭できた感があります。

二回目は同じ負け戦をしないように、うまくやっていきたいですね。

*1:ついでに、PCのリプレースをする深夜バイトや、年末年始に倉庫でピッキングのバイトをやりました。もうプログラマ関係ないですね

*2:今ならクラウドソーシングサービスで低単価を受け入れるなら数はあるのでしょう

*3:いやほんとなぜ溺れ死ななかったか不思議である

不自由さからの脱却としてのフリーランス

この記事は、フリーランス Advent Calendar 2016の15日目です。

自己紹介

この10月からフリーランスプログラマとして活動しています。主に

  • Androidアプリの開発
  • 業務系Webアプリケーションの開発

をしております。

Androidアプリは、これとかこれを受託で作ってます。どうぞ見てみてください。

本題

ドグマ

学生時代から僕は「不自由が嫌い」でした。僕を構成する不変のドグマであり、例を挙げると

  • 堅苦しいスーツを着なくてはいけない
  • 満員電車での通勤をしなくてはいけない
  • 超低血圧なのに朝ちゃんと起きなくてはいけない
  • 面白くない仕事をしなくてはいけない
  • 帰りたいのに帰れない

のようなことです。要は「自分がやりたくないことや嫌なことを強制されることや、その環境」が駄目なんです。なぜそれが嫌いかを考えたことがありますが、不自由な環境では単純にやる気がでない、面白くない、眠い、という至極自己中心な理由しか出てきませんでした。まあ誰だって多かれ少なかれそうでしょうけど。

とはいえ、生きている以上不自由なんて星の数ほどあるわけで、現実とどうにかして折り合っていく必要があります。僕の場合はその不自由さを受け入れはするものの、内部でうまく消化することができず、メンタルを病んでいくことが常でありました。何という生きにくい世界だと。

そんな牢獄の中にいるような気分において、フリーランスもしくは独立という言葉は非常に甘い響きを持つ誘惑でありました。独立さえすれば、自由になれば自分はこの苦しみから解放される、と。(もちろんそんなことは無いのですが、物事が正しく見えない状態だと世界が歪んで見えるのです。)

失敗

僕ははじめは関東で働いていました。いくつか会社を経験して最後の方は過労も祟って精神を完全に病んでしまっていました。そんな時に結婚を機に地元に帰ることになり、そこでフリーランスとして働くことにしました。ほら、自由な環境だよ。

結果から言うと完全な失敗でした。この顛末は別の機会に書くとして、この失敗が僕をフリーランスという夢から醒ましてくれたようです。

再び

その後、Twitterクライアントを作る会社や受託開発の会社を経験する中で、精神的な病はほぼ治り、かつては忌み嫌っていた不自由さもある程度は許容できるようにはなりました。(おそらく結婚と子供という独身時代からしたら最強の不自由さを受け入れられたことも大きい)

その受託開発の会社でずっといてもいいかと思うこともありました。しかし会社員という立場に固定することで、

  • ワークライフバランスを維持して働きたい
  • よい相互作用が強く働くチームでの開発がしたい
  • やりたいと感じた開発を自分でやりたい
  • 自身の仕事が社会に役立って欲しい

という願いを叶える可能性を閉じることになるのではないか?という疑念を感じるになりました。

家族もいるわけだし、願いを満たせないといっても給与のため働き続けなさいと言う人がこの日本には多いでしょう。ですが、僕はこの不自由さをずっと持ち続けることには耐えられないと判断しました。

上に挙げた願いは、フリーランスではなくて他の会社に転職して叶えることも出来たでしょう。しかしジョブホッパーであった過去から面接でいい結果を得るのは難しいであろうこと、そもそもその会社の良し悪しは中に入らないと分からないのでリスクが大きいことなどから、いわゆる転職サイトやエージェントを介しても転職は考えませんでした。よって、様々な選択ができるような身軽なポジションとしてフリーランスになることを決めたわけです。

現在

そういうわけで2ヶ月ほど前に前職を退職しフリーランスとして働くことになったわけですが、もちろん一切の不自由から解放されたというと決してそういうことは無いです。僕は受託や常駐のお仕事をしており、常駐の時は会社員と変わりありません。苦手な早起きをし、大嫌いな満員電車に揺られて「出社」しています。受託の場合でもやっていることは会社員時代と変わらず、お客さんからヒアリングした要望を仕様に落として、コードを書いてテストしてビルドして納品するというサイクルは変わりません。

では会社員とフリーランスは何が違うのかというと、それは決定的に選択の自由の有無です。

会社員の立場であれば、上司や会社の決定は絶対です。自分がやりたいことを訴えても最終的には会社の判断が介在します。自身の値付けも会社であれば様々な事情で平坦化されてしまいます。しかしフリーランスであれば、すべての選択が自分で決められます。これが決定的に違うことです。今付き合っているお客さんや、お仕事の単価、どういうお仕事をするか、願いを叶えられるかどうか、すべて自分に決定権があります。

もちろん決定した結果についてすべて自分で責任を負う必要があります。会社員であれば最終的には会社という大きな存在がかばってくれることが多いでしょうが、フリーは全部自分がリスクを負います。自由というとなんだか他人から羨ましがられることが多い気がしますが、その分責任を負うのは全部自分なので、これは人によりけりでしょう。

そのリスクをすべて背負ってでも僕は自由がある方を選んだことになります。なりたてが言ってもあまり説得力が無いことを書いたような気がしますが、また失敗したらその時はまたどうにかします。諦めて再び就職するという決断だってできるのが僕の選んだ自由です。

アドベントカレンダー参加者への質問の回答

  1. フリーランスで大事だと思うことは?

    初心を忘れないことではないでしょうか。勝手な印象ですが、仕事がないあまり自分を安売りして逆に市場価値を貶めている人を見ることがあります。わざわざフリーになったということはそれ相応の強い気持ちがあったはずです。それを忘れないことが日々の力になるのではないでしょうか。

  2. 将来どうしたいですか?(法人化、もっと稼ぎたい、もっと時間欲しい)

    法人化はあまり考えてないです。するにしても税金対策ですかね。

    将来何をしたいかは、その時々で自分がやりたいことが出来ていればいいと考えています。

  3. これからフリーランスを目指す人に一言

    なりたいのであればさっさと退職届出しましょう。あれこれ考えても時間の無駄です。ただ、自分の市場価値を少しでも測定してからのほうが火傷は少ないと思います。

ちょっとフリーになってみる

9月末をもって前職を退職しました。理由としてはいろいろありすぎて馬鹿正直に挙げることはしないですが、一番大きな理由としては、顧客に価値あるものを届けるシステム開発がここではできないと判断したことです。

価値あるシステムとは?

単純にシステムを納品した顧客が、

  • システム導入の目的を達成できること

でしょう。

目的としては、 - 基幹業務のコストを下げる - サービスをB2Cで提供して利用者に便利になってもらう - あるいはサービスを通じてコミュニケーションを楽しんでもらう

顧客ごとにいろいろな理由や目的があるでしょう。それをシステムの力で叶えてあげることこそがシステム会社のミッションと考えます。

前職では?

正直に言うとあまり満足な環境ではありませんでした。

常に人的リソースが不足していたこともあり、とにかく納めることが優先事項とされ、一旦納品後の仕様変更については、ボタンをひとつ追加するようなものまで細かく見積をして顧客に請求するような状態でした。

経営陣は一年くらい前に、顧客に価値を届けることをビジョンとして挙げていたのですが、それは一回きりの話だったようで、結局会社の目標として語られるのはいかに売上を伸ばすかばかりでした。経営なんてそんなものと言えばそれまでですが、果たしてこれまでのプロジェクトで顧客が満足できるようなものを作れたか?と問えば、微妙なところです。

フリーになったわけ

こうなると前職をやめて、普通に転職すればいいのでは?と疑問を持たれるかもしれませんが、自分としては自分の価値観にフィットする会社を探すジプシーとなるよりは自分が独立したほうが自分の思うとおりにやりやすいのではないかと判断した故です。

また、自分が住んでいる関西では関東ほど魅力的な会社が見つからない、また私は昔ジョブホッパーだったがゆえに一般的な求人応募では書類で通らないんですよね……

フリーでやりたいことができるのか?

やってみないと分からないというのが本音です。

ただ、これまで携わったお客様からは私を高く評価していただけたので、そこは少し自信になるかなと。実際、前職から仕事を引き継ぐ形で請ける顧客もいますし、自分の考えを通しやすい環境にはあります。

もちろん一人では一人分の仕事しかできないので、それがスケールできればいいなあと思うことはありますが、まずは「仕事はs17erさんに頼めば間違いない」と言われるよう、実績とブランド力をつけていきたいと思います。

x年ぶりy回目の復活について

最近ブログ書いてないなーと思いつつ、では久しぶりに書いてみようかなと思い立ったのが昨日のこと。

さっさと書けやというツッコミを一人で自分にしていざこうやってエディタを立ち上げてみるものの、仕事でMSOfficeで仕様書を書く時よりも筆が進まないのであります。(あ、これまでの私のブログは「だ、ある」調だったんですが、今後は「です、ます」調で行こうと思います)

さて何を書こうか、何を書こうかと頭を掻きむしるんですが、書くことが無いなら暖かい布団に入って寝ればいいものをなぜこんな時間に私はブログなんぞを書こうとしているのでしょうか。そもそも私はなぜブログを書こうと思ったのでしょうか……?

ひとつに、私ははてなブックマークによくブックマークしたり、他人のブクマコメントを見たりするため、ブラウザではてブをタブに固定しております。すなわち私とはてなというWebサイトは非常に近しい関係となるわけですが、すると私のこのブログであるはてなブログも目に入ってくるわけです。こんな零細ブログでさえPVが100を超えることがあるようで通知が飛んできたりします(訪れてきてくださった方々が人間かロボットかは知る由がございません)。すなわちいつもではないですが、そういえばブログ持ってたなあと思い出すことがあり、そしてたまに自分自身で訪れてみると、そこには雑草がぼうぼうと茂ってしまったくたびれたブログサイトがあるわけです。

そういう時に私は何か思い立つものがあり、もう一度この土地を耕してみようなどと酔狂なことを思い浮かぶわけです。

はい、こういうこと、私は人生において幾度と無く繰り返してきました。私はブログというものをこれまでに10は作ってそして潰してきております。潰した理由は更新しなくなり草ぼうぼうになった荒れ地をどうにかしようと思わなかったからで、今回も実はブログを閉じてまた新しく作ろうかと思ったわけです。しかしそうやったところできっと歴史は繰り返す、エントリを一年かけて5個くらい書いたところできっとそのまま放置され、今と同じことを繰り返すのです。

そういうわけで、過去に数個のエントリが数カ月おきにぽつぽつあるだけの虚ろなこの空間を少しどうにかしてやろう、そういう意気込みというほどでもない、なんとなく「まあやってみようか、しょうがないな」と自嘲気味に苦笑している、そんな自分がおります。疲れない程度にやっていこうと思います。

さて、何を書こう?

Markdownで書いた仕様書をWordで納品する方法

受託開発だと発注元に仕様書や設計書などのドキュメントを納品するのが慣習だ。それらのドキュメントはWordかExcelのMSOfficeの作ったフォーマットが暗黙の了解となっている。

Excel方眼紙の仕様書・設計書が嫌で最近はWordで書いているのがこれが扱いにくい。Excelでもそうだがまずバージョン管理がしづらいし、前版との差分がわかりづらい。最近のdiffツールはWordとかの差分も出してくれるようだがテキストベースのものとは確認のしやすさに雲泥の差があると感じる。

Office文書はそういう意味でGitでバージョン管理したとしても差分が確認しづらいのであまりその恩恵を受けにくい。この修正はいったいどういう背景があるのか、仕様を具体的な文章で読みたくても差分だけ判別しにくい。コードを読めばいいが、コードを読み解くよりも文章で読んだほうが効率的だ。ただし、そもそもドキュメントがコードと同期されているほうが稀ではあるのだが。

そしてドキュメントの作成ツールとしてもMSOfficeは扱いにくいと感じる。 Wordは構造とスタイルが密接に絡みついているし、ネストした箇条書きを書こうとするといつもハマる。「2.1.1 見出し3」としたいのに、「2.2 見出し3」とかなっているのをどう直したらいいのか分からない。俺は構造化した文章を書きたいだけなんだ。

Excel方眼紙は自由度は高いのかもしれないが、長い文章を書くときにいちいちちょうどよい長さで切って次行のセルに書くのがめんどくさい。文章を半行くらい加筆するとはみ出た文を次の行に差し込んで、はみ出た文章を切り取ってまた次行に……とどうでもいいことに気を回さなきゃいけなくてめんどくさい。自分が神経質で文章の行末はページの右端からちょうどよい位置までぴったり合わないと気がすまないので、本当にそういうことを感じさせず、純粋に文章の作成だけに集中させて欲しいと願ってしまう。

前置きが長くなった。

様々な理由、合理的な理由、宗教的な理由も含まれるができればMSOfficeは使いたくないので、納品物がある場合(ほとんどそうだが)、そのドキュメント作成は非常に気が重い。

そこで最近、Wordに書くのではなく、Markdownでテキストファイルに書くようにしたら仕様書作成が苦にならなくなった。何より使い慣れたVimで書けるのは編集において大きなアドバンテージだ。VimにはもちろんMarddownシンタックスハイライトを入れているので、マークアップに問題はないし、プラグインを入れてブラウザでプレビューを見ることも出来る。

そして納品するためのWordファイルには、PandocというライブラリでMarkdownから変換してdocxファイルを生成している。ちょっとスタイルがもさいので、予め作っておいたスタイルを後で適用し、表紙や目次はその時に追加しているが、提出のタイミングでするだけなので負担ではない。

Markdownで書いておけば、それをHTMLに変換してサーバにアップすればインターネット越しに見られるし、Wordに変換すればそれを古き良きSI会社に納品できる。mdファイルはテキストなのでGitで差分を見るのも容易い。

図や表などを記述するのが難点ではあるが、参考資料として別ファイル管理すればいいかと思っているので今のところ問題はない。(まあ画面仕様書とかはExcelで作るのがよいと思うが、本来専用のソフトがあってしかるべきだろう。しかしあらゆるドキュメント作成でMSが大勝利したため当分は状況は変わらなさそうだ)

書くのに抵抗がなくなったので、仕様変更があってもドキュメントを更新するのを忘れなくなる……はずだ。