エンジニアのひよこ_level10

毎日更新してた人。たまに記事書きます。

トラブルの対処タイミング。津波が来てからじゃ遅い【216日目】

リスクマネジメント

海の近くの家に住む。すると、津波に流されるリスクがあります。

このリスクを許容するにしても、
津波に流されたいわけではないです。

つまり、津波が起きそうな時は、避難をしないといけないわけですね。

津波が起こってから避難するのか

では、津波が起こった!

よし、避難だ!

避難が間に合わなかったあああああ

・・・ってなっちゃ意味ないですよね。
間に合わないのは、対処が遅かったからです。

では、いつ避難するのか

地震が起こったら避難する

津波というリスクを回避するためには、 津波が起こってからでは遅い。

津波が起こるのはいつか。 地震が起こった時だ。

つまり、地震が起こってから避難をするべきだ。

というやつですね。

リスク管理は、原因を確認する

津波というリスクに対応するには、そのリスクが起こる原因が何かを確かめる必要があります。 そして、地震という原因を見つけたら、地震が起きた時に対処をしましょう。

問題は早めに対応した方がいいのは間違いないので、 問題発見を早くするためにも、リスクの原因の分析をしていきましょう!

『仕様書に書いてないから』という設計の問題を軽減しよう【215日目】

『だって仕様書に書いてなかったんで』

プロジェクトにおいて、こんなケースありませんか。

これから作るプログラムの仕様書を渡したら、
部下が動かないプログラムを提出してくる。

『だって仕様書に書いてなかったんで』

仕様書に書いている通りに作っただけでは動かなかった。
だが、どう見てもこのプログラムでは目的のものが作れない・・・

詳細設計に問題があったのか?

一見、詳細設計に不足があったことが問題に見えます。

ですが、詳細設計で『100%完璧な仕様書』が作れるか。

作れるなら、きっとその人が作った方が早いし、きっとロボットに作らせる未来も簡単だと思います。

『100%完璧な仕様書』が作れないなら、どうするべきか。
私達は、『仕様書が正しく書けていない』というリスク管理をするべきなのです。

対策は何か

『仕様書が正しくかけない』というリスクに対して、2パターンのアプローチがあると思います。

『起こる前に対応する』
『起こった後の対処を用意する』

起こる前:『1人で設計しない』

『起こる前に対応する』のは非常に難しいです。
『100%に限りなく近い仕様書』を作る必要があるからです。

これに対する対応の1つが、『1人で設計しない』こと。

  1. 設計をレビューしてもらう
  2. プロジェクトに関わる人に共有して、意見をもらう

見落とし、見逃しを避ける。

設計を分担した際は、お互いの設計をレビューするのもいいです。
分担する以上、お互いに概要を知っているのでレビューもスムーズに行えると思います。

起こった後:『目的』を共有する

『仕様書に書いただけのプログラムでは動かない仕様書』
それでも動くプログラムが出来上がることがあります。

それは、プログラマーが自分で考えて、いい感じに作る時です。

『熟練者じゃないと出来ないだろう』
という一面はあるかもしれませんが、1つ工夫すると、
プログラマーがいい感じに作る可能性が増えます。

それは、『このプログラムは何のために作るか』を知っている時です。

各パーツを何のために作るかを共有する、目的を共有することが大切です。

『ネジを作る』のではなく『ネジのように固定するものを作る』

『ネジ』を作ってみましょう。  
この設計書通りに作ってください。

これでは、設計書通りにしか作ることが出来ません。

この机を作るために、この板を固定するものを作りましょう。
そのために『ネジ』を作ってみましょう。  
この設計書通りに作ってください。

すると、プログラマーが作ってみようとしたら、あれ?これじゃ固定出来なくないか?
と気がつくかもしれません。

じゃあどうすれば固定出来る?と考えて、プログラマーは『いい感じに作る』かもしれません。

私達は『ネジ』を作ることが目的ではなく、
その先の『机』を作ることが目的ではありませんか。

仕様書も『机を作る』ために作るためにあって、『ネジを作る』のはあくまで手段です。

リスク軽減は難しい

今回の主題は、目的を持った仕様書を作ろうというお話でした。

目的書くことも手間かもしれませんが、結果的にかなり詳細に書くよりも、
より部下に伝わって、工数削減に繋がる可能性もあると思うので、
目的を書くことを忘れないようにしたいと思いました。

【HTML】inputタグの丸いボタン、radioボタンの書き方【214日目】

こんなやつ、見たことないですか?


あ、これ押せるので試してみてください。
 

radioボタンって言います

これはラジオボタンと呼ばれているもので、

『必ず1つだけ選ぶ』選択肢で使います。 

 

 片方を押したら、もう片方が消えるとかですね。

 

どうやって書くの?

<input name="fruits" type="radio" value="apple" />りんご

<input name="fruits" type="radio" value="orange" />みかん

 

こんな感じです。

 

nameの意味

『name』と書かれているのは、それぞれが『セットである』ことを示すものです!

今回だと、りんごとみかんがセットですね。

 

セットだと何がいいか。

ボタンをクリックした時に、セットの中の1つしか選べないというやつです。

 

これは、りんごとみかんがセット、1から4がセットなので、クリックしたときにセットのなかから一個しか選べないやつです。

 

 valueの意味

これは、クリックしたものがなにかを示すものです。

決定ボタンを押した後に、サーバーにどのデータを送るか決めるものです。

 

もしnameがなかったら?

こんなふうに全部押せちゃいます。

 

ということで、適切にnameをセットしましょうね!

【Laravel】POSTで送ったRequestを配列で処理したい【213日目】

こんな時に使う

フォームでCheckBoxなどのデータをPOSTで受け取る。

Laravel側でRequestを受け取る。

その受け取ったデータをこんなふうに取得したい。

[
 'username' => 'uiro',
 'item_number => '5'
]

こうかく

function doPost(Request $request)
{
    $request->all();
}

これで受け取ったデータを全て配列で受け取れる。

公式ドキュメント

HTTPリクエスト 5.3 Laravel

ちなみに

toArray()関数もありましたが、元ソースコードを読むと、どうやらall()を呼び出しているだけなので、実質一緒でした。

ブログのタイトルと、見出しの付け方【212日目】

記事が読みにくいことがある

ブログを書いてる時に、最初の方は見出しを付けていなかったりとか、
付けていても記事が読みにくいことがあります。

なので、今少し気をつけていることをメモ

見出しだけで説明出来る?

見出しは概要です。その本文を読まなくても、なんとなくわかるようにする必要があります。

よく、記事に目次や見出しがあると思います。
その目次だけでなんとなく流れがわかると、

『この人はこういう内容をいいたいんだな』と思いながら読むことが出来ます。

目次や見出しがないと、
『この人は何の話をしたいんだろう?』
と考えながら記事を読むことになります。

それは、記事を読む時に内容が頭に入りにくいので、見出しは大切です。

見出しの内容は具体的にしすぎない

記事の詳細は本文で書けばいいです。
プログラミングのコメントで言うと、

  1. printfをする
  2. 画面に文字を表示する

だと、後者のタイトルの方が、実際に何がしたい記事なのかわかりやすいと思います。
そもそも、printfって何?って人だっているわけですし。

具体的なことより、目的や抽象化したものを見出しにしましょう。

見出しに気をつけて記事を書こう

見出し1つで読みやすさが変わるので、
記事を書く時には、書き終わったあと見出しを読み直すことや、
見出しを書いてから記事を書き始めるのもいいと思います。

ぜひやってみてください。

上の立場の視点を持つために、3種類の視点を持ってみよう【211日目】

視点が低すぎるとよく言われる

よく「もっと上の立場の視点を持ちなさい」と言われることは多いと思います。
ただ、どう具体的に考えれば上の立場の視点になれるのかわからないものです。

そこで、私が今気をつけている3つの視点の持ち方を紹介したいと思います。

上の立場の人なら、自分をどう使いたいか

■例
私がもし上司なら、私がどんな部下になってほしいか。
私がもし上司なら、私をどう扱ってプロジェクトを進めたいか。

■効果
自分が○○したい!の考えから離れて、
自分をどう扱われたい!という受け身側の視点を得ることが出来る。

上の立場の人なら、目標を達成するためにどうするか

■例
このプロジェクトを遂行するときには、何をどう手を付けようか
このプロジェクトを遂行するときには、誰をどうアサインしようか

■効果
自分に対する考えを捨てて、目的に集中した行動を考えることができる
自分を主体にして考えることから離れることが出来る

主語を『私』から『チーム、会社』に変える

■例
このプロジェクトに対して、チームはどのように貢献することが出来るか
このプロジェクトを行うことは、会社にどのような意味を持つか

■効果
主語を大きくすることで、行動や責任の規模を上げる事ができる
自分の直近の上司だけではなく、チームの上の管理部の方まで目を向けることが出来る

『上の視点を持ちなさい』の魔力

この言葉が理解できていない私のように、 上の視点を持っていなかった人は、何を求められているのか理解できてない可能性もあると思います。

なかなか上の視点を持てない人がいたら、 『チーム』として何をするべきか を質問してみると、その人の悩みが見えてくるかもしれません。

【PHP】'1.0' == '1'がtrueだった。【210日目】

なんで起こるの?

比較に数値形式の文字が含まれる場合は、文字列が 数値に変換され

PHP: 比較演算子 - Manual

値をテストしてみた

>>> "a" == "0"
=> false
>>> "a" == 0
=> true
>>> "1.0" == "1"
=> true
>>> "1.0" == 1
=> true
>>> "1.0" === "1"
=> false

== を使う時は気をつけよう

“1.0” == “1"
=> true
“1.0” === “1"
=> false

比較演算子の動きを理解しないと、意図しない動作をしてしまうので、
文字列同士で比較したとしても、===を忘れない方がいいなと思いましたという共有でした。

【PHP】HTMLのclassを指定して要素を取得。DomCrawler【209日目】

こんな時に使う

<div class="aaa">
    <p class="aaa">aaaaa</p>
    <img src="/test/img.png">
</div>

これの、src部分 /test/img.pngが欲しい。

DomCrawler使ってみよう

これ使うと、CSSセレクタ使って取得が出来る。

簡単。見やすい。

■DomCrawler
https://symfony.com/doc/current/components/dom_crawler.html

テスト用コード

(Laravelでphp artisan tinkerとかしていただければ試せます)

use Symfony\Component\DomCrawler\Crawler;

$html = <<< EOF
<div class="aaa">
<p class="aaa">aaaaa</p>
<img src="/test/img.png">
</div>
EOF;

$crawler = new Crawler($html);
$srcs = $crawler->filter('.aaa img')->each(function (Crawler $c) {
return $c->attr('src');
});

結果

=> [
"/test/img.png",
]