A Day In The Boy's Life -19ページ目

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

便利屋といっても要はオールラウンダー(今風で言うとフルスタック)な存在であったりするんですけど、プロジェクトはレイヤーが違う幾つものタスクの積み重ねで成り立っていますので、色んな場所で活躍できる人材がいてくれた方が何かと助かります。

ただ、実際問題そのような人材というのはなかなかいませんし、いたとしてもうまく機能しないケースが多かったりします。



タスクの隙間を誰が埋めるのか


プロジェクトは無数のタスクに分割され、それぞれの担当が決められ対応していきます。

一見、役割分担をうまくしているように見えても実際にはタスクの隙間というのが存在してしまいます。

箱(プロジェクト)の中にボール(タスク)を詰めていっても隙間ができるのと同じで、綺麗に詰め込めたつもりでも隙間だらけというのはよくある話です。


この隙間に結構落とし穴があって、その細かなタスクを担当する人が決められておらず宙に浮いてたり、「それそっちの担当と思ってたよ」とかで押し付け合いになったり、いつか誰かやるだろうと後回しにした結果、タスクをつなぎ合わせるところでうまくいかないといった大きな課題が直前で露出したりします。

こういうのを埋めるための幅広い知識を持っている便利屋となる人の存在ってかなり重要なわけで、細かいところに気が付いてカバーしてくれたり、担当者間のごたごたに仲介してうまく取り持ってくれたり、作業を効率化するためのツールの提供や調査などを行ってくれたりします。


システム開発の現場で言えば、モジュール間の仕様のずれに気が付いて修正パッチを作ったり、原因がよくわからないけど取りあえず回避でほっとかれたエラーの調査を行ったりとか、もはや誰も何も考えずに実行しているコマンドを理解して自動化するとか、誰も書こうとしないテストコードを書くとか、運用チームへの依頼や調整とか、煩い担当者との要求レベルとスケジュールの折り合いをつける交渉とか、枚挙にいとまがなかったりするんですけど、「そのタスクはこのチームが担当ね」と仕切ったところでプロジェクト推進上でこうした課題や新しいタスクというのはどんどん出てきます。


プロジェクトの中に隙間ができるは単にタスクの洗い出しに問題があったというだけでなく、どうしても担当者間で認識のずれが出ていたり、どっちがやるのか曖昧な領域があったり、担当チームの負担を増やしたくないために押し付け合いになった結果であったりと理由は様々あるんですけど、何れにせよそういう隙間というのは必ず発生してしまいますし、誰かが手を上げて対応しないと延々と放置されたりしてプロジェクトの後半になる頃には手が付けられないような状況になったりします。


要はそういう隙間を埋めることができる人材はどんなプロジェクトでも必要が出てきますし、出番が必ず回ってくるものだったりします。



誰が便利屋を買って出るのか


便利屋といえば都合がいい感じがして、実際プロジェクトマネージャーとかからもそういう目で見られている人も多くいたりはするんですけど、こういうポジションに選ばれるのはある程度の経験があって特定の専門分野に長けた人に押し付けられるのが常だったりもします。


何故こういった隙間を埋めるポジションや専門チームを作らないかは、(もちろん要員不足というものもありますが)プロジェクトリーダーなどが積み崩したタスクに網羅性と妥当性があると判断しているからで、担当者をきちんと決めて進捗を出せばうまく運営できると思っている部分はあるんですけど、どんなに細かくタスクを分割していったとしても先に書いたように隙間を100%埋めるようなことは無理なので便利屋に代打を必ずコールしなければならないの状況が生まれます。


また、最初から経験があって専門知識が豊富なキーとなるエンジニアを特定のポジションに付かせずに隙間を埋めるための便利屋として後方支援に回すようなことはプロジェクト運営的には誰もやらせたくないでしょうから、通常はシステム開発のリーダーなり現場の最前線に立たせる事となります

こうなってくると、自分の持ち場があるために他のレイヤーにまで気を回すことは難しくなりますし、手を出してしまうと自分の首が回らなくなってプロジェクトに悪影響を及ぼすことになったりします。

実際、こういった便利屋となるキーパーソンが色んなタスクに首を突っ込まれたり、担当外のその他の炎上案件の火消し役として参画させられることも多かったりして、負担がかなり大きくなることで別の課題が出てくることも多々あります。


ということで、プロジェクト運営的には様々なタスクで浮き彫りとなる課題を解消するための選任チームを置くこともなく、問題が浮き彫りになってからの付け焼刃的に今ある誰かをそれにあてがうようなことが繰り返されています。

個人的には、こういう便利屋の存在って選任がいないならプロジェクトリーダーやマネージャがやればいいのではと思ってたりはしますが。

進捗管理している関係でタスクの全体感が見えていますし、そもそも自分が洗い出したタスクの中に問題があったりもしているわけですし、各担当チームへ横断的に指示をできる権限をもってたりもしますから。

そのためにも当然、各専門チームに対応できるスキルや知識は当然必要となってくるわけですけどね。




Laravel 始めました。

ってことでまずはインストール編です。

Laravel5がリリースされていますが、今回はバージョン4.2のものをインストールしています。



Laravelをインストールする


LaravelをインストールするにはLaravelのインストーラを利用する方法と、composerを利用する方法の種類があるのですが、インスト ーラーを利用する方法はバージョンが指定できずに最新版がインストールされてしまうため、今回はcomposer経由でインストールする方法を書いています(一応インストーラーバージョンも後述してます)。

composerのインストールに関しては以前に書いた「[Composer] PHPのパッケージ管理にComposerを使う 」を参照してください。


Laravelをインストールしたい適当なディレクトリに移動し、下記のコマンドを実行するだけでインストールができます。


$ composer create-project laravel/laravel=4.2.* yourdir --prefer-dist

※ yourdirはLaravelのプロジェクトディレクトリ名で自由に決めれます。

※ 4.2はバージョンで指定しなかったら最新版がインストールされます。


Laravelはエラーメッセージなどを各言語にローカライズする仕組みがあり、ソース内のコメントなども含めて有志があらかじめ日本 語化しているパッケージも存在します。

これを利用したい場合は、下記のようにlaravel-jaのリポジトリを指定してインストールします。


$ composer create-project laravel-ja/laravel=4.2.* laravel --prefer-dist

どっちを利用しても、一応Laravel4.2の最新バージョンがインストールされます。

中身の違いはローカライズされたファイルやソース内のコメントが日本語化されているだけの違いになります。(確認した範囲では一部でごくごく小さな差分はあるようですが)


インストールしたLaravelのバージョンを確認したい場合はlaravel用ディレクトリ内で下記のようにコマンドを実行します。


$ cd laravel
$ php artisan --version
Laravel Framework version 4.2.17

Laravelの最新バージョンを利用したい場合、Laravelインストーラを利用することもできます。

この場合、まずはcomposer経由でLaravelインストーラをインストールします。


$ composer global require "laravel/installer=~1.1"

あとは、インストールしたlaravelコマンドを利用して同様にlaravelのプロジェクトディレクトリを作成します。


$ /path/to/.composer/vendor/bin/laravel new yourdir

余談ですが、Laravelインストール時に下記のようにZipArchiveがないって怒られた場合は、PHPのconfigureオプションに--enable-zipを付けて再コンパイルしましょう(PHPのパッケージ版の場合はzlib-develあたりをインストールすればいいっぽい)。


Fatal error: Class 'ZipArchive' not found in /path/to/.composer/vendor/laravel/installer/src/NewCommand.php on line 110

マニュアル を見ると--with-libzipオプションが使えるよ!見たいな書き方をし ているんですけど、このオプションを付けてもZipArchiveは使えないみたいです。



Laravelなどの各種設定


基本的に、Laravel内のpublicディレクトリをWebサーバーのドキュメントルートに指定すればアクセスできるようになります。

Apacheの場合は下記。


<virtualhost />
  DocumentRoot "/path/to/laravel/public"
  ServerName www.example.com
  ServerAdmin mail@example.com
</virtualhost />

<Directory "/path/to/laravel/public">
    AllowOverride all
</Directory>

後半の設定は、laravelディレクトリ内のpublicディレクトリにある,htaccessの設定を上書きできるようにするためのもので、この辺は元の設定がどうなっているかで判断してください。

後はApacheを再起動すれば利用できるんですけど、日本語環境で使う場合は幾つか設定を変えておいたほうが便利です。

この設定は、laravel/app/config/app.phpファイルにあるので下記のように2箇所編集しておきましょう。


'timezone' => 'Asia/Tokyo',

'locale' => 'ja',

localeを指定することで、laravel/app/lang/ja/の下にある各種メッセージファイルが読み込まれます。

日本語化されているLaravelパッケージを利用した場合は、あらかじめこの辺のローカライズされたファイルが配置されています。


もし、既にWebサーバーに別のフレームワークやアプリケーションが動いていて、Webサーバーのドキュメントルートを変更することが 難しいといった場合は、下記のようにAliasを用意することで回避することができます。

Apacheの場合はhttpd.confに下記の設定を追加します。


Alias /foo "/path/to/laravel/public"

次に、laravel/public/.htaccessを以下のように編集します。


<ifmodule />
    <ifmodule />
        Options -MultiViews
    </ifmodule />

    RewriteEngine On
    RewriteBase /foo
    # 最後がスラッシュのURLでアクセスされた場合のリダイレクト
    RewriteRule ^(.*)/$ /foo/$1 [L,R=301]

    # フロントコントローラーへの処理
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</ifmodule />

追加したのはRewriteBaseの設定で、そのすぐ下のRewriteRuleの設定は、スラッシュつきのURLにアクセスされた場合にリダイレクトする処理を合わせて/foo付きのURLにするように編集しています。

この設定により、www.example.com/foo/ のURLでLaravelにアクセスできるようになります。


これからもう少し学びながら記事をまとめていきたいと思います。





自分の場合、主に社内システム構築に携わることが多いんですけど、社内用サイトだからといってあんまり適当なデザインもどうかと思うのでデザイナーさんも含めて画面設計をしたりすることがあったりします。

その際に「こういう今風なデザインにしましょう!」というデザイナー側の意見に対して「いや、それだと対象のユーザー層がついてこれなさそうだし、このシステム要件に合わないのでもう少し現実的なデザインにしましょう」みたいな意見の対立が起きたりします。


そんな激しい意見の言い合いをするわけではないのですが、見た目を格好よく見せたり流行に乗せたデザインにしたいという意見と、実際にユーザーとの窓口をする保守・運用の観点から見た目はどうであれなるべく問合せがないわかりやすいデザインにしておきたいという意見があったりするわけです。



本当は作りたい理想の形


別にエンジニアが現実的な意見ばかりを口にするわけではありません。

本音を言えば、モダンで美しく無駄の無い洗練されていてキュッキュ動いて半透明な感じのデザインとかでシステムを作り上げたいと思ってたりはするんです。

ですが、どうしてもデザインありきになってくると実際にそれをずっと運用したときのことを考えてしまったりします。


理由はいくつかありますが、一番大きいのは現場で利用者と近い存在のエンジニアにとってはあれこれ言ってくるユーザーやそのトラブルの対処に時間をとられることを恐れてなるべく複雑なデザインを取り入れたくない思っています。

単に見てくれだけを気にするデザインはすべきではないのでしょうけど、実際には絵コンテしか書けませんと言ったデザイナーさんも多く、どうしても本人の理想のデザインを語ってきたりもします。


私はデザイナーではないのでその真意についてはよくわからない部分も多いのですが、エンジニア側の意見に話を戻せば、例えばそのサービスのユーザー層を考えたときに、幅広い年齢層の人が使っていたりしてモダンなインターフェースを使いこなすことが難しいだろうというのがあったりします。

社内システムの場合、面倒なことに年齢層と社内の権威というものが比例するケースがあったりして、どうしても上のレイヤーを無視できないケースもあったりします。


また、社内のIT環境の基準が決まっていたりしてモダンなデザインやUIをきちんとサポートできる最新のブラウザが利用できないといったケースもあります。

これも結局は社員のIT水準が一定ではないことの弊害だったりもするんですけど、ヘルプデスク業務の効率化のためにブラウザはIEのみとかになってたり、業務都合でブラウザやバージョンを固定されていたりするケースもあったりして、理想のデザインを実現することが技術的な観点で難しいケースもあったりします。


そのほかにも、以前に「プログラマから見たデザイン 」で書いたようにそのシステムの業務側の担当者がいて、その人の感覚でデザインが変えられてしまって本来の意図やそこに込められたメッセージが全て無駄となるようなこともあったりと、なんだかんだでそういう過去の経験から、折り合いを付けたいと現実的なデザイン案を言ってしまったりします。



現場が考えるデザイン


一方で、じゃあ現場で考えているデザインというものが果たしてベストなのかといったら全然そんなことも無くって、それはもうデザインと呼べるものではなく単にテキストでしかないといったものも多かったりします。

要するに問い合わせに跳ねるようなことがないように説明文をやたら入れたり、マニュアルをいたるところに添付したり、間違いを無くすためにやたらと長いナビゲーションページを用意したり、無駄に文字がでかかったり、目を引くようにとほとんどの文字が赤字だったりします。


元をただせばそういうものを解消するために必要なのがデザインなのに、現場ではその知識が無いためにできることといったら先ほど書いたようなテキストの羅列で回避するぐらいしかできないための苦肉の策が最悪な方向に向いたりするわけです。

ですが、結局ユーザーはそんな注釈を読んだりしません。

どんなに書いたところで無視されます。
現場も実はユーザーはそんなもんだと思っていたりして、注釈をやたら入れているのはクレームが入ったときに「その件はきちんと画面に書いてますよ?」って言うための予防線を引いているだけだったりします。


現場は、そもそもデザインがどうあるべきかって話はされないので理想像さえも描けません。

まぁ、デザインする手段を持ち合わせていないのでできることといったら書いたとおりテキストの羅列しかないので致し方ないのかもしれませんけど。

デザイナーが一方的に描く理想像をそのまま受け入れることも描いたように現場としては難しいことも多いですし、一方で現場が改善しようとしているものはデザインとは呼べないもので結果としてより酷いものになっていくことになります。

ですので、一度エンジニア側とデザイナー側とでそれぞれの理想像を語ることは必要だと思います。

そこから現実的な落しどころを探していけば言いだけですので、こういう意見の対立はあって叱るべきだとは思います。