![]() | 10日で使えるPHP | 未経験のサルでも分かるPHPの学習サイト 文系未経験、サルでも10日でPHPを使えるように内容を構成した独学向け学習サイト。不要な基礎はバッサリ切り捨て必要な基礎を十分に深堀した・・・ 続きを見る |
![]() | 新卒や現役エンジニアの学習方法(オンライン学習 or 書籍) 「SIerやメーカーに就職した新卒」や「現役エンジニア」で、動画配信で学ぶ技術者はほぼゼロと言ってよい。洗練された書籍で学んだほうが短期間で技術習得できるし高すぎる。・・・ 続きを見る |
![]() | RUNTEQの就職先と就職できた卒業生インタビュー RUNTEQの就職先と就職できた卒業生のインタビュー。 インタビュー対象の卒業生の学歴は不明2名、大学中退1名をを除き全員大卒、前職は派遣社員1名、新卒1名を除き、全員正規雇用の社員または公務員だ。・・・ 続きを見る |
同名の関数を定義した場合、パースエラーが発生する。
パースエラー(構文エラー)は、PHPがコードをパース(構文解釈)する段階で止まってしまうエラーで、多くの場合、間違った構文 ; の付け忘れ、{} () の閉じ忘れなどを記述して発生する。
パースエラーは致命的なエラーで、コンパイルエラーに相当する。パースエラーが発生した場合、プログラムの実行を停止する。
return はプログラムの制御を呼び出し元に戻す。 呼び出し側のモジュールでは、呼び出しの次の式から続行する。戻り値として値を設定できる。
function、method で return を呼び出した場合、function、method の処理を終了し、戻り値があれば戻り値を返す。
グローバルスコープで呼び出されると、現在実行中のスクリプトが終了する。
スクリプトが include もしくは require されたものである場合、制御は呼び出し元のファイルに戻る。return に戻り値が設定されている場合、include の戻り値となる 。
<?php
function add($a, $b) {
$c = $a + $b;
return $c; /* 戻り値 $c を返し、function 終了 */
}
$rtn = add(1, 2);
echo $rtn; /* 3 表示 */
?><?php
function who() {
echo 'hogehoge';
return; /* functionを終了。戻り値は返さない。 */
}
$rtn = who(); /* hogehoge 表示 */
?>引数の参照渡し(リファレンス渡し)は、定義する関数の引数の前に & を 付加する。
以下の例では、function set_bono(&$var) の &$var は参照渡しの引数になる。
set_bono($name) で、set_bono(&$var) の &$var は $name の参照渡し(リファレンス渡し)となる。
$name は 'hogehoge' が代入されているが、set_bono 関数の $var = 'bonobono'; で $name の内容は 'bonobono' に書き換わる。
引数の参照渡し(リファレンス渡し)は、変数の参照(リファレンス)と同様の仕組みで、$name と $var は同じメモリ領域を指し示すようになる(エイリアス、別名)。詳しくは 変数の参照(リファレンス)を参照。
<?php
function set_bono(&$var) {
$var = 'bonobono';
}
$name = 'hogehoge';
echo $name; /* hogehoge 表示 */
set_bono($name);
echo $name; /* bonobono 表示 */
?>関数は引数に、引数 = デフォルト値 の書式で、デフォルト値を設定できる。
デフォルト値は、呼び出し元のパラメーターに引数が指定されなかった場合に使われる。ただし、null を渡した場合はデフォルト値を代入しないので、注意が必要。
以下の例では、function set_bono($var = 'bonobono') の引数、$var に デフォルト値 'bonobono' を設定している。
<?php
function set_bono($var = 'bonobono') {
return $var . 'はラッコ' ;
}
echo set_bono(); /* bonobonoはラッコ 表示 */
echo set_bono('hogehoge'); /* hogehogeはラッコ 表示 */
echo set_bono(null); /* はラッコ 表示 */
?>整数(integer)は、10 進数(基数 10)、16 進数(基数 16)、8 進数(基数 8)あるいは 2 進数(基数 2)表記で指定可能。
正の値(+)負の値(-)を数値の前に付与可能。
<?php
$num = 1234; // 10進整数
$num = -1234; // 負の値
$num = 01234; // 8進整数 (0で始まる数値は8進数とみなされる)
$num = 0xffff; // 16進整数 (0xで始まる数値は16進数とみなされる)
$num = 0b11000100; // 2進整数 (0bで始まる数値は2進数とみなされる)(PHP 5.4.0以降)
?><?php
$num = 1.234; /* 浮動小数点数 */
$num = 1.2e3; /* 浮動小数点数(指数表記) 1.2 × 103 */
$num = 7E-10; /* 浮動小数点数(指数表記) 7 × 10 - 10 */
$num = 123_456_789; /* 数値リテラルセパレータ(PHP 7.4.0 以降) */
?>true、false を指定する。小文字、大文字の区別はない。
<?php
$bool = true;
$bool = false;
$bool = TRUE;
$bool = True;
?>一般的に、true は整数の 1、false は 整数の 0 として扱わる。
※VBなどの一部言語では true は -1 なので注意が必要。
Javaは boolean型と数値の互換性はない。よって、true は整数の 1、false は 整数の 0 としての扱いはない(コンパイルエラー)
true、false を整数として扱い比較するのは、バグの温床になりやすい。
比較は if ($a === true)、if ($a === false) のような厳密な比較を行うことが、可読性が高く望ましい。
<?php
echo (int)true; /* 1 表示 */
echo (int)false; /* 0 表示 */
echo intval(true); /* 1 表示 */
echo intval(false); /* 0 表示 */
echo (bool)0; /* 表示されない */
echo (bool)'0'; /* 表示されない */
echo (bool)"0"; /* 表示されない */
echo (bool)1; /* 1 表示 */
echo (bool)-1; /* 1 表示 */
echo (bool)123; /* 1 表示 */
echo (bool)'1'; /* 1 表示 */
echo (bool)"1"; /* 1 表示 */
?>文字列はシングルクオーテーション(')、ダブルクォーテーション(")で囲む。ダブルクォーテーションで囲まれた文字列の中ではエスケープシーケンスを使用できる(※シングルクオーテーションでは使用できない)。
<?php
$str = 'Hello'; /* Hello 表示 */
$str = "Hello"; /* Hello 表示 */
?>シングルクオーテーションで囲まれた文字列の中で、文字としてシングルクオーテーションを使いたい場合は \' を、ダブルクォーテーションで囲まれた文字列の中で、文字としてシングルクオーテーションを使いたい場合は \" を使用する。
<?php
$str = 'Hello \'World\' '; /* Hello 'World' 表示 */
$str = "Hello \"World\" "; /* Hello "World" 表示 */
?>シングルクオーテーションで囲まれた文字列の中でダブルクォーテーションを使用できる。また、ダブルクォーテーションで囲まれた文字列の中でシングルクオーテーションを使用できる。
<?php
$str = 'Hello "World" '; /* Hello "World" 表示 */
$str = "Hello 'World' "; /* Hello 'World' 表示 */
?>| エスケープシーケンス | 機能 |
|---|---|
| \" | 二重引用符 |
| \n | ラインフィード (LF またはアスキーの 0x0A (10)) |
| \r | キャリッジリターン (CR またはアスキーの 0x0D (13)) |
| \\ | バックスラッシュ |
| \t | 水平タブ (HT またはアスキーの 0x09 (9)) |
| \v | 垂直タブ (VT またはアスキーの 0x0B (11)) |
| \e | エスケープ (ESC あるいはアスキーの 0x1B (27)) |
| \f | フォームフィード (FF またはアスキーの 0x0C (12)) |
| \[0-7]{1,3} | 8進数: 正規表現 [0-7]{1,3} にマッチする文字シーケンスは、8 進数表記の 1 文字 (例:. "\101" === "A") です。 正規表現にマッチする文字シーケンスは、8 進数表記の 1 文字です。 1 バイトに収まらない部分は、何もメッセージを出さずにオーバーフローします (例: "\400" === "\000") 。 |
| \x[0-9A-Fa-f]{1,2} | 16進数: 正規表現 [0-9A-Fa-f]{1,2} にマッチする文字シーケンスは、16 進数表記の 1 文字(例: "\x41" === "A")です。 |
| \u{[0-9A-Fa-f]+} | Unicode: 正規表現 [0-9A-Fa-f]+ にマッチする文字シーケンスは、Unicode のコードポイントです。 そのコードポイントの UTF-8 表現を文字列として出力します。 シーケンスを波括弧で囲む必要があります。例 "\u{41}" === "A" |
PHPには以下の特徴がある。
PHPはHTMLに直接PHPのコードを記述できる。
<?php を開始タグ、 ?> を終了タグとして認識し、タグの内側をPHPのコードとして実行する。
タグの外側はPHPパーサに無視されるので、HTMLに「開始タグ <?php ~ 終了タグ ?>」を記述し、ファイル名を .php とすることで、HTML内に直接コードを埋め込んで動的なWebページを生成できる。
※パーサとはソースコードやXML、HTMLなどの言語で記述された構造的なテキストデータを解析し、コンピュータが扱いやすいデータ構造に変換するプログラムの総称。コンパイラとは別物。
<?php タグの後ろ、?>の前には必ず「改行・半角空白・タブ」のいずれかを記述する。「改行・半角空白・タブ」がないとエラーになる。
<?php ~ ?>の前後を改行で記述
<?php
echo 'Hello World';
?><?php ~ ?>の前後を半角空白で記述
<?php echo 'Hello World' ?><html>
<head>
<title>HTMLのタイトル</title>
</head>
<body>
<h1>h1タグ</h1>
<?php
echo 'Hello World';
?>
</body>
</html><?= ?> は、echo の代わりに値を画面に出力する。
賛否両論あると思うが、可読性、一貫性の低下と、バグの温床になりやすいため <?= ?> は望ましくない。
<html>
<head>
<title>HTMLのタイトル</title>
</head>
<body>
<h1>h1タグ</h1>
<?= 'Hello World'; ?>
</body>
</html>php.ini で short_open_tag が On に設定されている場合は、<?php ~ ?> の代わりに <? ~ ?> を、<?php echo ~ ?> の代わりに <?= ~ ?> を使用できる。
<? ~ ?><? echo 'Hello World'; ?><?php= ~ ?><?= echo 'Hello World'; ?>php.ini で asp_tags が On に設定されている場合は、<?php ~ ?> の代わりに <% ~ %> を、<?php echo ~ ?> の代わりに <%= ~ %> を使用できる。
<% ~ %><% echo 'Hello World'; %><%= ~ %><%= echo 'Hello World'; %>PHPでは、文はセミコロン「;」で区切る。
<?php
echo 'Hello World';
echo 'hogehoge world';
?>セミコロン「;」で区切っていれば、1行に複数の文を記述できる。
<?php
echo 'Hello World'; echo 'hogehoge world';
?>PHPでは、改行の出力は \n を記述する。
\n を使用するときは文字列をダブルクォーテーションで囲む必要がある。シングルクォーテーションでは改行されない。
<?php
echo "Hello World \n hogehoge world";
?><?php
echo 'Hello World<br>';
echo 'hogehoge world<br>';
?><?php
echo nl2br("Hello World \n hogehoge world");
?>PHPのコメントは、/* */、//、# の3つの書き方がある。
一般的には /* */、// の2つを使用する。
PHPの命名規則にデファクトスタンダードは存在しない。キャメルケース、スネークケース いずれも使用している。
PHPの言語上の関数は、スネークケースで命名されており、クラス処理ではキャメルケースが使われている。
現在は PSR-12 という規格が業界標準(モダンな開発のデファクト)として広く普及している。
| 種類 | 書式例 | PHPでの主な用途 |
|---|---|---|
| キャメルケース | isSpace | クラス処理。現在の主流。 |
| スネークケース | is_space | 関数名。PHP標準関数に似せる場合。 |
HTMLのミニファイ(コードの圧縮)はファイルサイズを小さくして読み込み速度を向上させる目的の他に、HTMLを読みにくくし無断複製を防ぐ目的でも行われる。
ミニファイを行うファイルにPHPのソースコードがあると改行コードが取り除かれてしまい、//、# でコメントを記述すると正しく機能しなくなる。
ミニファイを行う場合は、コメントは全て /* */ で記述する必要がある。
PHPは、HTMLに「開始タグ <?php ~ 終了タグ ?>」を記述し、ファイル名(拡張子)を .php とすることで、HTML内に直接コードを埋め込んで動的なWebページを生成できる。
Rubyは、Embedded Ruby を使用し、<% %> または <%= %> を使用する。
<% %> はRubyの処理のみで、HTMLへの出力はしない場合に使用する。<%= %> はRubyの処理および、HTMLへの出力する場合に使用する。
| 機能 | Java/JSP | PHP | Ruby | Python |
|---|---|---|---|---|
| HTMLに直接コードを記述 | Java | PHP | Ruby | Python |
| HTMLに直接コードを記述 | <% %> <%= %> ${ } | <?php ?> <?= ?> | ERBを使用 <% %> <%= %> | Python |
シンタックスハイライトをおこなうライブラリは syntaxhighlighter、highlight.js、Prism.js などがある。※syntaxhighlighter は2017年で更新が止まっており、事実上開発が終了している。
当サイトは highlight.js を使用している。
highlight.js は下記のスクリプトを<body>~</body>タグの間に記述するだけで使用できる。
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.10/styles/a11y-dark.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.10/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>シンタックスハイライトさせたいコードを<pre><code></code></pre>で囲む事でシンタックスハイライトされる。
<pre><code>
<?php
$num = 1; /* グローバルスコープで変数定義 */
function func() {
global $num; /* グローバルスコープの$numを呼び出し */
echo $num; /* 1が出力される */
}
func(); /* funcを呼び出し */
?>
</code></pre>a11y-dark.min.css を別のテーマ(配色)に変えることもできる。おすすめは a11y-dark.min.css、vs2015.min.css、xt256.min.css だ。
記念すべきぶった斬り第1号プログラミングスクールは「RUNTEQ(ランテック)」だ。
人月単価300万円以上の筆者が、たまたま目に留まったプログラミングスクールの「情弱狩り&補助金ビジネス」に驚愕し、組織でエンジニアの育成を手掛けてきた経験からプログラミングスクールの評価を試みた。
長年システム業界に従事してきたが、プログラミングスクール RUNTEQ(ランテック)には驚きのあまりあんぐり口を開けたまま、脳みそが毛穴から出そうになった。

キャッチコピーは「何者でもない自分から誇れる自分へ」「超実践型プログラミングスクール」、「専門実践教育訓練給付金制度」の対象だ。
身に付くスキルは「Ruby」「Ruby on Rails」「データベース」「HTML CSS」「JavaScript」「開発工程」「サーバー」「ネットワーク」「クラウド」「Linux」「プロダクト開発」「Git Git-flow」「Docker」。
現役ベテランエンジニアからのRUNTEQ(ランテック)評価は以下のとおりである。
「リアルタイムで質疑応答できない」
オンラインプログラミングスクール(動画配信型スクール)の場合、プログラミングの学習で必ずつまずく(初心者の場合は100%近い確率)。
つまずいたとき、当然即時解決したい。プログラミングスクールは性質上教室で質疑応答が必要だが、「教室」がない、または「Zoomなどの双方向リアルタイムで質問可能なサポート」がないプログラミングスクールは問題の解決が困難になる。
Discordや専用画面で質問し、時間をおいて返答が帰ってくる仕組みの場合、プログラミング初心者は自分がどのような問題で学習が進まないか文章化できないことも多い。
対面で実際に画面を見てもらい、問題を共有し、解決する環境が必要だが、多くのプログラミングスクールはサポートが薄い。
乱暴な表現だが「売りっぱなしでオシマイのビジネス」で「雑なプログラミングスクール」と考えてよい。人も教室もコストがかかるので、できるだけコストをかけずにプログラミングスクールを運営したいようだ。
配信内容がいかに優れていようが、充実したサポートなしで現場で通用するエンジニアは育たない。
オンラインプログラミングスクールの運営には、大きく2つの運営コストがかかる。
「配信される動画」の作成には多大なコストがかかるが、一度作成してしまえば、開発環境や言語仕様が変わらなければ、それ以上のコストは発生しない。
「質疑応答などのサポート」は生徒1人につき、1人以上の講師が必要になり、ランニングコストとしてかかり続ける。
あなたはナニに授業料を支払うのか?動画閲覧の権利に支払うのか?質疑応答に答えてくれる講師に支払うのか?どちらの比重が大きいか自分で整理できているか?
わたしは講師にお金を支払うことはあっても、動画閲覧の権利に多大な料金を支払うことはない。
動画の内容は、世の中にあまたある技術書に書かれている内容で、書店かアマゾンでポチれば同等以上の情報が受講料の1/100以下で手に入るからだ。
「配信される動画」に、世の中にあまたある技術書にはナイ特別な情報など何もないし、優れた入門書以上にわかりやすい動画であることもない。
しかり講師は、わたしが問題に直面したとき回答を示してくれる。対価を支払うに値する存在だ。
薄いサポートしかないプログラミングスクールは、サポートにはコストがかかるので、サポートの質を下げて利益を出す方針だからである。
オンラインプログラミングスクール(動画配信型)で配信期間制限があるのは理解しがたい。
サポートの打ち切りはあって良いと思うが、配信の受講に期間制限を設ける意図があるとすれば、サーバー負荷になる同時接続数を減らしたいだけだ。教育機関として理解しがたい。
「卒業率非公開(卒業できない受講者数が多い)」
RUNTEQ(ランテック)は週25時間、9ヶ月で約1000時間の学習を推奨している。カリキュラム(シラバス)は以下の通りだ。

システム開発業界を知らない未経験者は「すごく親切に教えてくれるんだ」という誤解をするかもしれない時間数だが、学習時間は短ければ短いほど良い。
だらだら長く時間をかけるのは、システム業界では悪だ。「200時間」学習して「800時間」現場で鍛えた方が遥かに優れた人材になる。
私はたくさんの人材を採用してきたが「Rubyを1000時間勉強しました」と言われたらマイナス評価にするだろう。Rubyに限らず多言語でも同様だ。
プログラミング言語とフレームワークを学ぶのに「1000時間」は時間がかかり過ぎで、学習効率も理解も著しく悪い人という印象しか持てない。
「SIerやメーカーに就職した新卒」や「現役エンジニア」で、動画配信で学ぶ技術者はほぼゼロと言ってよい。洗練された書籍で学んだほうが短期間で技術習得できるし、そもそも高すぎる。→「現役エンジニアや新卒はどのように学んでいるか?」
卒業率に関しても疑問が残る。卒業率を公表しないということは卒業率は高くないと考えるべきだ。
「ツッコミどころ満載のWEB系企業就職率94%」
「WEB系企業就職率94%」と驚異的な数字を出しているが、ツッコミどころが多すぎでかなり呆れた。「大卒の就活・転職」をまったく理解していないようだ。
特定業種の更に小さなカテゴリーであるWEB系の就職率94%という数字は、超難関大学卒でも狙って出せる数字ではない。

前提条件は「RUNTEQ受講生のうち所定の学習を履行された方およびRUNTEQ Agent経由で転職活動を履行された方に関する就職率(2023年1月~2023年6月の当社統計より)」となっている。
「所定の学習を履行された方」とは卒業できた受講者で「RUNTEQ Agent経由」に限定された就職率を公表している。
RUNTEQ Agent」は株式会社RUNTEQ(ランテック)の経営なので、「確実に就職できそうな受講生に絞って人材紹介(企業側から成果報酬を得る)しているのがRUNTEQ Agentなのだろう・・・」

「RUNTEQ Agent経由で転職活動を履行された方に関する就職率」どの程度の大きさで表示されているか?2番目の画像左下で確認できるが、極小の文字サイズの白抜きで書かれており、ほぼ読めないのがわかると思う。
この表記はさすがに作為を感じざるを得ない。
RUNTEQ AGENT公式サイトで書類通過率は70%となっている。70%ですらRUNTEQ AGENTの主張なので実態は不明だ。
「就職できた卒業生インタビュー」を集計してみたので参考にしてほしい。 ほぼ全員大卒で前職正規雇用者が転職しているケースに絞ってインタビューしているのがわかる。
「WEB系企業就職率94%」が「受講者全体の就職率」と大幅に乖離していた場合、確実にJARO行き案件だ。
「就職率非公開(就職できない受講者数が多い)」
受講者の就職先、就職先は非公開(追跡調査すらおこなっていないだろう)だ。
受講者の就職率が高いなら公表するだろう。就職率を公表しないということは、就職率は高くないと考えるべきだ。
卒業生の就職実績には「GMO MEDIA」「チームラボ」「SARAH」「L&E Group」「XIAN シアン」「株式会社 CI」「SENRI」「ファーモ」「Relic」「ゴーガ」「しくみ製作所」「株式会社palan」「ファンリピート」などがある。
GMO MEDIAを除けば中小零細だけで、大手SIer、メーカー、知名度の高いWEBサービス事業者の就職実績は記載がない。
Rubyオンリーのカリキュラム、営業方法に至ってはJARO行き案件・・・といった内容で、これで受講者の多くがシステム業界で活躍できる人材になれるとはまったく思えない。RUNTEQを受講して良かったと実感している受講者もいると思うが・・・
厚労省がおこなっている「専門実践教育訓練給付金制度」は、実質80%程度の受講料が免除され安価に受講できる。この制度で受講者は約80%免除されるが、免除された80%は厚労省がプログラミングスクールに支払う(国の予算、つまり税金)。
動画配信型のプログラミングスクールは、政府主導で進められているリスキリングに該当する。 政府主導の目指すリスキリングとは「高度人材の育成」で、5年で1兆円の予算を投じる予定だ。
プログラミングスクールで育成できるのはエントリーレベルの低度労働者なので、国の予算(税金)を食い物にする「補助金ビジネス」と呼ばれている。
この制度の本来の目的は「高度な専門技能を身に付けるために教育訓練」であり「日本国民が高度人材として活躍できるように支援する」だが、 高度人材の定義が曖昧で結果を求めていないので、ネットフリックスのように配信さえしていれば補助金が給付される。
補助金の給付条件を「受講者の就職率n%以上の教育機関に限る」のようにすれば良いのだが現在はザル状態で、補助金目当てで群がってくる連中の食い物にされている状態だ。
プログラミングスクールは結果に責任を負わないし、受講者は80%免除で安価に受講できるので、両者ともに本気度は低い。
「Ruby」しかヤリタクナイけど「PHP」も一応サポート
「Ruby」と「Ruby on Rails」だけじゃさすがに不味いだろと思ったかどうかは知らないが、取り合えず簡単なPHPもサポートしている。

但し書きがあって「任意カリキュラム」としているので「Ruby」と「Rails」しかヤリタクナイ人にとっては都合が良いのではないか?
気になるのが「任意カリキュラム」に「AIを用いた開発手法」という項目がある。
ノリで書いてしまったのか?ほんき?なのか、意図はわからないが、「生成AIでのコーディングは、設計者が書いた要件の意図を、生成AIは正確に理解できないので、現状ではゴミ同然の結果になる。

生成AIにコーディングさせるには、設計書の記述がもっとも詳細で正確で厳しいミッションクリティカルシステムの詳細設計書よりも、更に詳細で正確な設計書を記述する必要があり、それなら人間がコーディングした方がコストがかからないという現実がある。
生成AIがコーディングする未来が来ると宣っているヤカラもいるが、現実はローコードツールからノーコードツールへの発展の方がシステム開発に寄与するので、生成AIがコーディングするのは「お遊び」「趣味」のような話で、実際に業務で稼働するシステムへの活用はない。
大多数のエンジニアが従事する業務システム、特に大規模業務システムでJavaは必須言語であり、日本の大規模システム開発(業務システム)でRubyを採用しているシステムはゼロだ。
1万人月を超える新規開発の大規模システムではJava以外の選択はないと考えてよい。
情報配信型WEBサービスの「Cookpad」や「食べログ」、マッチングサービスの「クラウドワークス」はRubyを採用しているが、障害が発生しても大きな損害に直結しにくい。

業務システムでの障害は、事故扱いとなり損害が発生するケースが多い。業務システムと情報配信型WEBサービスでは求められる品質も規模も全く異なる。
この違いが、コンパイル言語であり変数宣言が必要(静的型付け言語)で言語仕様がしっかりした「Java」か、インタプリタ言語であり変数宣言を必要としない(動的型付け言語)安価に開発できるが品質管理が困難な「Ruby、Python、PHP」などのを選択するかに、判断が分かれる。

Rubyを採用したサービスで例外もある。会計サービスの「freee」だ。
「freee」は小規模事業者・個人向けのクラウド会計ソフトで2024年時点での導入は54万事業所ある。
会計ソフトなのでミッションクリティカルなシステムとは違い、障害が重大な影響(損害)に繋がりにくいが、会計という業務と規模を考えると、長時間のシステムダウンは許されないシステムと言える。
また、会計は複雑な処理が多く、Rubyを採用した場合、設計方針(ルール)、コーディング規約などの決め事を細部までおこなわないと品質管理が難しい。
「freeeってそんなにスゴイの?」RUNTEQとは関係ない話1

これらの企業は、独自の会計システムを構築しているかSAPを導入しており、会計処理に「freee」は利用していない。
サービスの調査のために課金しているケースはあると思われるが、freeeで売上1兆円を超える企業の会計業務はできない。
導入事例を見てもわかるが、エンタープライズパッケージでも導入企業の多くは売上数億円~最大で数十億円だ。
数百億円以上の売上高のある企業の会計システムは、汎用的なパッケージでは機能が足りない。また予算管理システムと会計システムは連動する必要があるので、会計システムと予算管理システムは統合されている。
数千億円以上の売上高のある企業は、会計予算管理システムと請求・支払い管理システムが連動する。
お金の動きには権限のある担当者の承認が必要になり、紙ベースの承認をおこなう企業も多いが、承認に要する帳票を出力するのはシステムで、多くの企業がワークフローと直結したシステムを運用している。
売上高、年度予算が数兆円~数十兆円規模の組織は日本でも無数にあるわけではなく、ほぼすべての組織で独自システムを運用している。
長い間、年度予算数千億円~数兆円の組織の基幹系、勘定系、情報系のシステムに携わってきたが、 この規模の組織の会計業務を「freee」でおこなっていると誤認されるような広告をおこなうこと自体とても愚かだ。
サービスを大きく見せたい気持ちはわかるが、ユーザーに誤った認識を与えるような広告行為は節度ある企業のすることではない。
「リクナビやスーモ(リクルート系)はJava採用」RUNTEQとは関係ない話2

リクナビやスーモなどリクルートが運用するシステムは、業態が元々存在するので「十分な予算」があり「Java」が採用されている。業務システムと同様で障害は事故扱いで損害が発生する。
最低でも数十年使用する業務システムと、短命な情報配信型WEBサービスでは、開発規模(予算、工数)も体制(人数、要求スキル)が全く異なる。
プログラミングスクールで学ぶなら、長くシステム開発業界で仕事を続けるられるスキルセットを最初に学ぶべきである。
場所と人にコストがかかる教室がない、技術者を常駐させるコストがかかるZoomなどの双方向のサポート(質疑応答)もない。
必要なコストをかけないRUNTEQ(ランテック)は全くおすすめできない行ってはいけないプログラミングスクールという評価だ。
企業情報では資本金が「未記載」であり、入居中のビル「〒150-0042 東京都渋谷区宇田川町36-6 ワールド宇田川ビル5階B室」は1975年竣工の築50年のビルで評価は低い。
「新型コロナ感染拡大防止の観点から全従業員テレワーク(在宅勤務)に移行しております。お電話が繋がりにくい可能性がございますので、お問い合わせの際はお問い合わせページからご連絡を検討頂けますようお願い申し上げます。」の記述があるが、電話連絡先はRUNTEQの公式サイトのどこにもない。
「お電話が繋がりにくい」ではなく、まったく繋ぐ気はないようだ。
経営者(菊本 久寿)の経歴は、私立進学高から大学へは行かず音楽活動に専念、音楽系の専門学校に行くが中退、その後、音響系の専門学校を卒業。
HTMLを独学で学習しゴルフ用品販売企業の社内SEとして正規雇用。SESに転職→株式会社フラクタリストに転職する。
フラクタリストはngi group株式会社(旧ネットエイジ、現ユナイテッド)に買収され退職し、フリーランスを経て2014年に株式会社スタートアップテクノロジーを設立する。2019年にプログラミングスクールRUNTEQを始める。
C++、Java、Perl、ColdFusion、PHP、Python、Rubyなど10以上の言語で開発をおこなう。
経営者の経歴とYouTubeの配信を見た率直な感想は、プログラマー的な発想で「要件定義→基本設計→詳細設計→製造→試験→教育→運用」というシステム開発の全行程を俯瞰的にみることができていない。

図)システム開発事業者の全工程
参考資料 人生を救ってくれたエンジニアという生き方 菊本久寿 - Speaker Deck
参考資料 「天才じゃなくても世界を変えられる」。菊本久寿氏が語る、「エンジニア×スタートアップ」のキャリアが最高な理由 | アンドエンジニア
参考資料 株式会社スタートアップテクノロジー代表 菊本 久寿氏-社長の履歴書
経営者(菊本 久寿)の経歴は、最初から大きな予算があるシステム開発ではなく、新規事業として立ち上げる小規模な予算の開発を手掛けることが多かったようだ。
小規模な開発からスタートしても事業が成長軌道に乗った場合、システム開発予算も比例して大きくなるが、予算数十億円~数千億円単位の開発を上流工程から下流工程まで俯瞰的な立場で携わる経験はないようだ。
SIerの工程
図)システム開発事業者の全工程
大手SIerでは、新卒で入社後すぐに研修、SE、プロジェクトマネジメント、コンサルティング、営業(場合によってはプログラマー)などを経験後、専門分野(PM/SE、コンサルタント、営業、R&D)のスペシャリストに分かれていく。
15年程度は様々な現場・職種を経験し、適正などを考慮し望む職種のスペシャリストになるケースが多い。
「図)システム開発事業者の全工程」でRUNTEQがサポートしている範囲は「設計・製造・試験」で大部分は「製造工程」だ。
SIerの人材SIerに所属する人材は「受注→システム開発→運用・保全」までの全行程を経験し、専門分野にわかれていく。
「要件定義」がシステムの要であり、この工程でシステムのグランドデザイン~機能を決定し、以降すべての工程に影響する。エンジニアとしての最大役割、責任、おもしろさは「要件定義」に集約される。
「要件定義」次第で、素晴らしいプロジェクト、素晴らしいシステムになるし、炎上プロジェクト、ゴミシステムにもなる。
「要件定義」を設計や製造工程で挽回することはできない。特に製造は末端の話であり、要件定義の品質を製造工程ではどうすることもできない。
設計工程を担当するSEや、製造工程のプログラマー・コーダーは要件定義の奴隷とも言える。
RUNTEQは経営者の経歴を色濃く反映したプログラミングスクールと言える。RUNTEQのカリキュラムはアジャイルのような工程管理で小規模プロジェクト(Ruby採用)おこなうのに向いている。
| 公式サイト | https://runteq.jp/ |
|---|---|
| 料金(税込)と受講期間 | Web開発スタンダードコース(5~9ヵ月間):550,000円 |
| 就業実績 | 就職実績公開なし。就業率不明。 |
| 受講条件 | 18歳以上 |
| 学習形態(場所) | オンライン(動画配信型)※教室なし |
| 学習形態(学び方) | 自己学習形式 |
| 受講期間 | 9ヶ月(期間終了後はサービスも終了) |
| 時間 | 24時間 |
| 言語 | Ruby |
| データベース | 不明 ※Oracleではない |
| OS | Linux |
| その他スキル | Rails、HTML、CSS、JavaScript、Git、Git-flow Docker、開発工程、サーバー、ネットワーク、クラウド |
| 無料カウンセリング | 対面なし。オンラインあり(Google Meet)。 |
| 無料体験レッスン | なし |
| 学習サポート体制 | 対面なし。Zoomなどのリアルタイム双方向なし。AIチャットあり。対人チャットあり(平日11:00~22:00、休日10:00~18:00、水・祝日休み)。質問フォームあり(回答遅い)。 |
| 就職支援 | 模擬面接なし。就職支援なし。 |
| 返金保証 | なし |
| その他 | チャットで毎週の学習振り返りを実施。 専任キャリアトレーナーと毎月マンツーマンの面談を実施。 交流会やイベントを定期的に開催。 |
| 運営企業 | 株式会社RUNTEQ - 企業情報 |
| 法人番号 | 1040001087651 |
| 資本金 | 非公開 |
RUNTEQが公式ホームページで紹介している就職できた卒業生のインタビューでは、新卒1名、前職で派遣社員1名を除き、前職は全員正規雇用の社員または公務員で、フリーター、職歴ナシは存在しない。

学歴は不明2名、大学中退1名を除き全員大卒。不明2名の内1名は国家公務員(税関)だったので大卒とみるべきだろう。
残り一名は介護士をしながら社会人野球に取り組んでおり、膝の故障で野球を諦め地元の印刷会社に就職しているので、大卒、高卒どちらの可能性もある。
| 年齢 | 性別 | 学歴 | 前職 | 前職 雇用形態 |
|---|---|---|---|---|
| 20代 7名 30代 3名 40代 1名 不明 1名 | 男性 7名 女性 5名 | 大卒 9名 大学中退 1名 不明 2名 | 国家公務員 2名 地方公務員 1名 民間企業 9名 | 正規雇用 11名 派遣 1名 |
つまりインタビュー対象が全員大卒の可能性(1名大学中退)があり、新卒1名を除く全員が前職で正規雇用の職歴もあるので転職は十分可能であり、見栄えのよいキャリアの持ち主を選んでインタービューしている。
前職が国家公務員、地方公務員もいるのは驚く。
RUNTEQ(ランテック)に紹介してもらいたいのは、フリーターから中小零細のシステム関連の会社でよいので正規雇用されたレベルのインタビューなのだが、実績があれば掲載すると思うので「実績なし」と考えるのが妥当だろう。
転職が難しい経歴しかない人が、RUNTEQで学んだことで転職に成功し、正規雇用されたストーリーを紹介してほしいが、インタビューがないので成功事例はないのかもしれない。
| 年齢/性別 | インタビューページ | 履修期間 | 前職/雇用形態 | 学歴 | 就職先企業 | 給与 | 業務内容 |
|---|---|---|---|---|---|---|---|
| 20代 女性 | 金融機関の営業職からWebエンジニアへ転職 | 2024年1月~2024年10月 | 金融機関(社員) | 大卒 | 不明 | 不明 | バックエンドエンジニア |
| 20代 女性 | 国家公務員(税関)から自社開発のバックエンドエンジニアへ | 2024年1月~2024年10月 | 国家公務員(税関) | 不明 | 不明 | 不明 | 不明 |
| 40代 男性 | MR・人事を経てデータサイエンティストへ | 2023年10月~2024年7月 | 製薬会社(社員) | 大卒 | 不明 | 不明 | データ分析、DX人材育成支援、研修企画、生成AI社内活用 |
| 20代 男性 | 証券会社の営業から自社開発のWebエンジニアへ | 2023年4月~2024年1月 | 証券会社(社員) | 大卒 | Web系自社開発企業 | 不明 | 保守・運用・新規機能開発 |
| 不明 男性 | 自社開発企業のフルスタックエンジニアへ | 2023年4月~2024年1月 | 印刷会社(社員) | 不明 | 不明 | 不明 | バックエンドエンジニア |
| 20代 男性 | コンサル会社からWebエンジニアへ | 2023年1月~2023年10月 | 一般企業 | 大卒 | 不明 | 不明 | バックエンドエンジニア |
| 20代 男性 | 地方公務員からフルリモートの受託開発エンジニアへ | 2022年2月~2022年8月 | 地方公務員 | 大卒 | 不明 | 不明 | プロジェクトマネジメント、開発 |
| 20代 女性 | 客室乗務員からWebエンジニアへ転身 | 2021年11月~2022年5月 | 航空会社(社員) | 大卒 | 不明 | 不明 | SI |
| 20代 女性 | 新卒で受託開発企業から内定獲得 | 2021年8月~2022年5月 | 新卒 | 大卒 | 不明 | 不明 | |
| 30代 男性 | エンタメ系自社開発のWebエンジニアへ | 2021年7月~2022年3月 | 広告代理店(社員) | 大卒 | 不明 | 不明 | 保守・新規機能開発 |
| 30代 女性 | 派遣社員がWebエンジニア(自社開発企業)に転職するまで | 2020年10月~2021年5月 | 派遣社員 | 大学中退 | 株式会社Beer and Tech | 不明 | 保守・新規機能開発 |
| 30代 男性 | 国家公務員から未経験エンジニア転職 | 2019年9月~2020年2月 | 国家公務員 | 同志社大学卒 | 株式会社Relicホールディングス傘下 | 不明 | 不明 |
疑問に思ったのは、もしわたしが知人に「WEB系エンジニアになろうかと考えている」と相談されたら、エンジニアの面白さも説明するが、それ以上にエンジニアの不安定な状況も説明する。
特に大手の上場企業のグループ中核企業であれば「職の寿命」と、上場企業によるレイオフは日本では現状不可能なので安定も担保されるが、非上場、特に中小零細(ベンチャーも大多数は中小零細)では実質的レイオフは普通にあること説明する。
| 企業名 | 事業内容 | 上場非上場 | 資本金 | 従業員数 |
|---|---|---|---|---|
| GMO MEDIA | インターネットメディアの開発・運営、ポイントサイト構築支援、コンテンツ制作 | 東証グロース | 7億6197万円 | 209名 |
| チームラボ | スマートフォンアプリ開発、WEBサイト開発 | 非上場 | 1000万円 | 不明 |
| SARAH | FoodDataBank、SARAH、もぐナビ | 非上場 | 1億円 | 不明 |
| L&E Group | ASP事業、デジタルマーケティング支援事業、インキュベート事業 | 非上場 | 不明 | 不明 |
| XIAN シアン | mediable、marketing DX | 非上場 | 不明 | 不明 |
| 株式会社 CI | Webアプリケーション開発、モバイルアプリ開発 | 非上場 | 不明 | 不明 |
| SENRI | SENRI | 非上場 | 不明 | 不明 |
| ファーモ | 農業用IoT製品の開発・販売、ITサービスの開発・販売 | 非上場 | 1億円 | 31名 |
| Relic | インキュベーションテック、事業プロデュース/新規事業開発支援、イノベーター人材育成支援、地方創生・地域イノベーション事業、イノベーション・ワークプレイス事業 | 非上場 | 5400万円 | 350名 |
| ゴーガ | ITコンサルティング、ウェブサイト設計・構築、システム設計・構築、ソフトウェア開発、インターネットサービス運営 | 非上場 | 1500万円 | 不明 |
| しくみ製作所 | ITソリューションサービス | 非上場 | 1915万円 | 不明 |
| palan | AR作成サービス『palanAR』及びARデジタルマップ『AR Maps』の運営 | 非上場 | 不明 | 不明 |
| ファンリピート | ITシステム開発事業 | 非上場 | 2000万円 | 不明 |
| ユニエイム | POSサービス事業、決済サービス事業 | 非上場 | 3000万円 | 不明 |
| Kaien | 人材紹介、人事コンサルティング、就労移行支援、自立訓練、ガクプロ | 非上場 | 1740万円 | 393名 |
| ハコベル | 物流のシェアリングプラットフォーム「ハコベル」の運営 | 非上場 | 1億円 | 不明 |
| ムーブ | Webシステムの構築、開発、保守、コンサルティング | 非上場 | 500万円 | 不明 |
専門実践教育訓練給付金制度は厚生労働省が実施する教育訓練を支援する制度だ。
受給対象者は、雇用保険の被保険者または被保険者であった方(離職後1年以内)が対象になる。
簡単に言うと「現在就業中で雇用保険に加入している人」「雇用保険に加入していたが1年以内に離職した人」が対象になる。「再就職のための職業訓練としての利用」と「現在就業中で技能を学びたい人の利用」を対象とした制度設計になっている。


RUNTEQ(ランテック)の場合、資格等の取得は、2 or 3の条件で給付を受けるには「修了認定基準」を満たす必要がある。
専門実践教育訓練給付金制度こそが、オンラインプログラミングスクールが爆発的に増殖した要因の1つだ(もう1つはコロナ)。
くれるものは貰っておきたいと考えるのは当たり前の発想だが、これは税金であり「結果を出さないスクールへの補助」はまさに補助金に群がる「補助金ビジネス」に他ならない。
引用元 教育訓練給付制度|厚生労働省
引用元 専門実践教育訓練給付金制度(Reスキル講座)対象プログラミングスクールRUNTEQの支給条件と対象者
| RUNTEQ | ZEROSUKU | 忍者CODE | 侍エンジニア | RaiseTech | テックアカデミー | |
|---|---|---|---|---|---|---|
| Java | - | 対 | 対 | 対 | 対 | 対 |
| JSP | - | 対 | 対 | 対 | 対 | 対 |
| C++ | - | - | - | - | - | - |
| C# | - | - | - | - | - | - |
| Cobol | - | - | - | - | - | - |
| Python | - | - | 対 | 対 | - | 対 |
| Ruby | 対 | - | 対 | - | - | - |
| PHP | - | - | - | 対 | - | - |
| Go | - | - | - | - | - | - |
| Swift | - | - | - | - | - | - |
| Kotlin | - | - | - | - | - | - |
| JavaScript | 対 | 対 | 対 | - | - | - |
| TypeScript | - | - | - | 対 | - | - |
| SQL | 対 | 対 | 対 | 対 | - | 対 |
| HTML | 対 | 対 | 対 | - | - | 対 |
| CSS | 対 | 対 | 対 | 対 | - | 対 |
| RUNTEQ | ZEROSUKU | 忍者CODE | 侍エンジニア | RaiseTech | テックアカデミー | |
|---|---|---|---|---|---|---|
| Spring | - | - | 対 | - | 対 | - |
| Struts | - | 対 | - | - | - | - |
| Laravel | - | - | - | 対 | - | - |
| CakePHP | - | - | - | - | - | - |
| .NET | - | - | - | - | - | - |
| Flask | - | - | 対 | - | - | - |
| Ruby on Rails | 対 | - | 対 | - | - | - |
| Anguler | - | - | - | - | - | - |
| Vue.js | - | - | - | - | - | - |
| React | - | - | - | - | - | - |
| Ajax | - | 対 | - | - | - | - |
| jQuery | - | 対 | - | - | - | - |
| Bootstrap | - | 対 | - | - | - | - |
| RUNTEQ | ZEROSUKU | 忍者CODE | 侍エンジニア | RaiseTech | テックアカデミー | |
|---|---|---|---|---|---|---|
| Oracle | - | - | - | - | 対 | - |
| Microsoft SQL Server | - | - | - | - | - | - |
| MySQL | 対 | 対 | 対 | 対 | 対 | - |
| PostgreSQL | - | - | - | - | 対 | - |
| MongoDB | - | - | - | - | - | - |
| Amazon Aurora | - | - | - | - | - | - |
| Amazon DynamoDB | - | - | - | - | - | - |
| RUNTEQ | ZEROSUKU | 忍者CODE | 侍エンジニア | RaiseTech | テックアカデミー | |
|---|---|---|---|---|---|---|
| Linux | 対 | - | - | - | - | - |
| RUNTEQ | ZEROSUKU | 忍者CODE | 侍エンジニア | RaiseTech | テックアカデミー | |
|---|---|---|---|---|---|---|
| AWS | - | - | - | - | - | - |
| RUNTEQ | ZEROSUKU | 忍者CODE | 侍エンジニア | RaiseTech | テックアカデミー | |
|---|---|---|---|---|---|---|
| Eclipse | - | 対 | 対 | - | 対 | - |
| Visual Studio | - | - | - | - | - | - |
| Git | 対 | - | - | - | - | 対 |
| Docker | 対 | - | - | - | - | - |
![]() | 10日で使えるPHP | 未経験のサルでも分かるPHPの学習サイト 文系未経験、サルでも10日でPHPを使えるように内容を構成した独学向け学習サイト。不要な基礎はバッサリ切り捨て必要な基礎を十分に深堀した・・・ 続きを見る |
![]() | 新卒や現役エンジニアの学習方法(オンライン学習 or 書籍) 「SIerやメーカーに就職した新卒」や「現役エンジニア」で、動画配信で学ぶ技術者はほぼゼロと言ってよい。洗練された書籍で学んだほうが短期間で技術習得できるし高すぎる。・・・ 続きを見る |
![]() | RUNTEQの就職先と就職できた卒業生インタビュー RUNTEQの就職先と就職できた卒業生のインタビュー。 インタビュー対象の卒業生の学歴は不明2名、大学中退1名をを除き全員大卒、前職は派遣社員1名、新卒1名を除き、全員正規雇用の社員または公務員だ。・・・ 続きを見る |
小規模開発ではPython、Rubyを採用するケースもあるが、Python、Ruby、PHPなどの変数宣言を必要としない言語(動的型付け言語)は品質を担保することが困難で、システム開発に向かない言語とされている。
Pythonは生成AIの開発に必要なライブラリが充実しており、生成AI関連では採用されることが多い。
小規模かつアジャイル開発のようなスピード重視の開発に採用されるケースはあるが、決められた「品質」「予算」「納期」を実現する言語としては適切ではない。
Python、Ruby、PHPはいずれもインタプリタ言語であり、処理性能が重要な大規模システムではボトルネックになる。それぞれ非公式なコンパイラもあるが、信頼性が低く採用できない。

Cobol、C++、Javaなどの変数宣言が必要な言語(静的型付け言語)は品質管理が容易であり、コンパイル言語なので実行速度も速い(厳密にはJavaは中間言語)。
システム開発で重要なことは「品質」「予算」「納期」だ。変数宣言が不要であったり、スコープが曖昧な言語は、動かすことは簡単だが品質管理は難しい。
変数宣言が必要で言語仕様が明確なコンパイル言語は、正しく記述しなければコンパイルエラーで動かない。
動かすことが面倒な言語だが、システム開発で重要なことは「品質」「予算」「納期」であり、これらの条件に沿った言語だ。
プログラミングスクールでJavaが学習対象にない理由は明確で「教えるのが難しい」からだ。Javaはオブジェクト指向で変数宣言が必須でありコンパイル言語だ。
書いたプログラムをレンタルサーバーにアップロードすれば動かせるPython、Ruby、PHPとは違い、JVMを起動させる必要があるし、WEBシステムならJVMと連動させる必要もある。
プログラムを書いてもコンパイルしなければ動かない。コンパイルでエラーがあればコンパイルすらできない。
Python、Ruby、PHPはインタプリタなので書けばなんとなく動くが、Cobol、C++、Javaは違う。
つまり、Cobol、C++、Javaを避けて、Python、Ruby、PHPを教えたがるプログラミングスクールは、現実のシステム開発を知りつつ、大多数のエンジニアが従事する業務システム、特に大規模システム(業務システム)ではまったく意味がないことを教えているボッタクリスクールと言える。
「SIerやメーカーに就職した新卒」や「現役エンジニア」で、動画配信で学ぶ技術者はほぼゼロと言ってよい。洗練された書籍で学んだほうが短期間で技術習得できるし、そもそも高すぎる。
「動画配信でチンタラ学んでいるような人は現場ではやっていけない」というのが率直な意見だと思う。
筆者が新卒・中途の未経験者の教育で使用している書籍が「10日で覚えるシリーズ」だ。新卒未経験者にはこの本で10日間でMVCモデル2(Java Servlet JSP Oracle)の開発の初歩ができるようになってもらう。
中途未経験者の採用試験でも使っており、10日間時給を支払い、複数いる場合は協力し合ってこの課題をおこなわせる。

すべて完璧に理解・実装できる必要はないが、重要な部分は10日間ですべて理解・実装できないと合格できない。
できるか?できないか?グダグダ考える前に「読んで手を動かせ」ば、大卒・専門卒・高卒問わず10日間でできるようになる。
もう1つ、この10日間でやることには意味がある。
システム開発は気の知れたチームでおこなえることの方が少ない。多くのプロジェクトは、流動するSE・PG・コーダーを調達し、チームを作りプロジェクトを推進する。
自分が流動する人材を向かい入れる側になることもあれば、1人で誰も知人のいないプロジェクトに放り込まれることもある。
全員知らない人は普通で、物怖じしたりグダグダしている暇はなく、現場に入ったら即順応して仕事を始める必要がある。それが即戦力だ。
フットワークが重い人は戦力にならないので短期間で「ダメなヤツ」という烙印が押されてプロジェクトから放り出される。
未経験者でも課題を10日間でやり切る人は「心も作業もフットワークが軽く」近い将来1人で放り出されてもやっていける。
SIerやメーカーのエンジニアに現場プログラマは存在しない。
全工程のうちプログラマが必要な製造工程(開発工程)は1/5(20%)以下なので、プロジェクトを転々するような現場プログラマは「付加価値が低く」「アイドルタイムも多い」。稼働率が下がり利益率を損ねるからだ。
プロジェクトで全工程に携わるようなポジションであれば「顧客との距離」が近く「付加価値」が高い。「稼働率」も高く「プロジェクトへの貢献度」も大きくなる。
システム業界未経験者や、経験不足のエンジニアモドキは「設計」「製造」工程が大きなウェイトを占めると思うだろうが、下の絵を見てもわかるとおり小さな工程に過ぎない(人数は必要になる)。

図)システム開発事業者の全工程
プロジェクトで全工程に携わるようなポジションであれば「稼働率」が高く「付加価値」も高い。プロジェクトへの貢献度も大きくなる。
プログラマは需要が発生するプロジェクトを転々することから「季節労働者」と呼ばれている。
製造工程は小さな工程なのでプロジェクトで必要な期間は短い。プログラマがプロジェクトを渡り歩くのはこのためだ。
SEは机上のドカタと呼ばれている。システム開発の現場は屈指のブラックな職場だ。
通常の学習や、受験、試験でも同様なことが言えるが「いかに要点を短くわかりやすくまとめた参考書」を見つけられるか?が学習を進めていく上で最も重要な技術の1つだ。
技術習得も同様で、自分にあった「要点を短くわかりやすくまとめた技術書」を見つけられるか?は、システム業界で生きて行く上で必須能力になる。
ひとそれぞれ、好みや、わかりやすいと感じる書籍は違うが「わかりやすさ」とは「クドクド長い説明ではなく、必要な要点を端的に説明する」ことだ。
分厚い参考書では挫折するが、薄っぺらいが重要な要点を網羅した参考書では挫折しない。
特に現役エンジニアは、実業務をこなしつつ余剰時間で新たな技術習得をする必要があり、ほとんどのエンジニアは就業時間中に新たな技術を学ぶ余裕はない。
では、どのように学習しているのか?
ペラッペラで良いので、必要な要件だけ書かれた書籍で学んでいる。もしくは、必要な部分のみ抜粋して学んでいる。
エンジニアは技術書を頭から読まず、目次を見てパラパラめくって必要な情報に辿り着く。速読に近いことを多くのエンジニアはしている(ダメなヤツはできない)。
| 本 | 動画 | |
|---|---|---|
| 1)目次・索引から目的の情報を開く | 〇 | × |
| 2)速読 | 〇 | △ 書籍の速読より劣る |
| 3)再読(理解できない場合など) | 〇 | △ 書籍は目線を動かすだけ 動画は戻る必要あり |
| 4)説明を読みながら作業 | 〇 | × |
| 5)1ページの情報量 | 〇 | × |
| 6)操作説明などに伴う画面の変化の説明 | △ | ◎ 圧倒的に優れている |
動画配信に目次はなく、パラパラめくることも出来ない。
本のようにここら辺じゃない?と当たりをつけて開いて、自分が探したい情報にいち早く辿り着けない。
本のような物理的UIではないので時間がかかる。
「オンラインプログラミングスクール=動画配信」であるため、スクールは動画と書籍の比較はしない。オンラインプログラミングスクールのメリットが見えてこないからだ。
| 工程 | 担当 | 説明 |
|---|---|---|
| 1)営業(開拓 営業先・事業内容) | 営業/コンサルタント | お客様からシステムの開発依頼を受けるケースと、新規に開拓するケースがある。 稼動中のシステムを受注・運用・保守をしている優れた会社にお客様が別件を相談し、新規案件として獲得するケースが多い。※1 この他に、競争入札やRFPを元に提案するケースがある。 ※1 現場のコンサルタントやSEが優秀で、顧客が現在稼動中のシステムに満足している場合、別件の相談→受注に繋がるケース。 |
受験を思い出してほしい。
毎日コツコツと勉強し積み上げて、自分の知識として定着されるのは絶対条件だが、勉強ができる人は要点をとらえるのが上手く、ノートを綺麗に書き、短期間で詰め込む要領の良さがある。
勉強をやらなかった、もしくは勉強の正しいやり方を知らない結果、できなかった事に問題はないが、勉強をやってもできなかったのは問題がある。
脳の良し悪しはあるが、コーディング(プログラミング)程度なら早慶レベルの理工学部の現役大学生は、技術書のみで1ヶ月でかなり書けるようになる。勉強をやってもできなかった人は、1ヶ月で書けるようにはならない。
高卒でも「学習用の技術書を選択」と「進め方」さえ間違わなければ、フルタイムで学べば1ヶ月でかなり書けるようになる。

難関大学の理工学部卒から、高卒まで幅広い学歴の未経験者の教育をおこない、高卒を上場企業に即戦力として中途採用されるレベルのエンジニアに育成することもおこなってきたが、プログラミングに関して言えば、学歴や理系・文系は関係なく誰でも普通にできようになる。
プログラミングは限りなく奥深く、広い知識が必要だが、ありがちな業務システムや配信型WEBシステム程度なら、難易度の高い実装(複雑なトランザクション処理やビジネスロジック)を除けば、2ヶ月フルタイムで学習すればそこそこ現場の戦力になる。
「UI」や「データベースの参照・更新」程度なら技術力は必要なく、誰でも短期間で出来るようになる。高校の数学、物理、英語の方が遥かに難しい。
プログラミングスクールに何十万円もかけて行くとかオンラインで学ぶという感覚は、システム業界の人間にはまったく理解しがたい感覚だ。
大きな書店で気に入った本を買ってきて読めば十分わかる話だ(※アマゾンでポチる場合は、大人買いして良本を見つける必要がある。良本か?自分に合っているか?などはパラパラめくってみないと判断できないからだ)。
プログラミングとはその程度の話で、手に職を付けるといったレベルのものではない。現場レベルのコーディング(プログラミング)だけで一生食べていける可能性はかなり低い。
システム開発全般に対する理解、最低でも下流工程の設計能力がなくては50歳まで現役で働くことすら難しいだろう。
Rubyが採用されるシステムは情報配信型のWEBサービスが多い(Cookpad、食べログなど)。
情報配信型のWEBサービスは、小さなサービス(システム)としてスタートし、PVに比例した広告収入などの収益に応じて機能(システム)を建て増ししていく。
情報配信型のWEBサービスの業務要件は曖昧で、ユーザーニーズに合わせて機能追加、変更が頻繁に発生する。
ウォーターフォール(要件定義→基本設計→詳細設計→製造→単体テスト→結合テスト→総合テスト→運用)のような工程が完璧に終るまで次の工程には進まない管理手法では、頻発する仕様変更に対応するのが難しく、アジャイルのような管理手法が適している。

一般的なシステム開発の工程である、業務要件やユーザー要件を定義し、設計書を書き、設計書に基づき製造(コーディング)し、単体テスト→結合テスト→総合テストと段階を追って試験し、運用に乗せるといった工程の大部分を割愛し、要件と大まかな設計書でコーディングして十分な試験をしないでリリースする。
問題があれば、即ソースコードを修正してリリースするといった運用をしている。

また最初から大きな予算をかけて開発しても、サービスが利益につながるビジネスになるか不明確なので、できるだけ少ない予算でスタートする必要がある。
これはどのような情報配信型のWEBサービスでもほぼ同じだ。
仕様変更が頻発し低予算で開発するケースには、Ruby、Python、PHPが適している(JavaやC++では予算がかかり過ぎるでの選択できない)。
低予算の小規模システムではJavaやC++を採用するよりRuby、Python、PHPの方が安価にあがるが、品質とはトレードオフの関係にある。
情報配信型のWEBサービスのように見えるが、ビジネスモデルが全く違う業務システムもある。
例えば「リクナビ」や「スーモ」は、情報配信型のWEBサービスのように見えるが、「リクナビは就活産業」であり、「スーモは不動産業」だ。

「リクナビ」や「スーモ」は、情報配信型WEBサービスのように見えるが全く異なる。
業態が元々存在するので「十分な予算」があり「Java」が採用されている。業務システムと同様で、障害は事故扱いで損害が発生する。
古典的なビジネスとして元々成立しており、それをデジタル化しただけである。この場合、最初から大きな予算で堅牢なシステムを開発できる。使用する言語はJavaが主流だ。
フレームワークは、BFF(backend for frontend)には「Spring Boot(Spring Web Flux)/ Kotlin」、Backendには「Spring Boot(Spring MVC)」を採用している。
ミッションクリティカルなシステムではないのでサーバーは「AWS」、ミドルウェアは「Google Cloud BigQuery」「Gatling」「Fluentd」だ。サーバー運用管理は「Datadog」「NewRelic」を採用している。
リクルートではプライベートクラウドを構築しているので、AWSでの運用が上手くいかない場合は、プライベートクラウドに専用環境を構築できる強みがある。
引用元 Javaエンジニア(SUUMO/じゃらん/ホットペッパー等オープンポジション)の募集内容|キャリア採用|株式会社リクルート
引用元 Recruit (@recruitengineers) on Speaker Deck
Rubyを採用したサービスで例外もある。会計サービスの「freee」だ。

「freee」は小規模事業者・個人向けのクラウド会計ソフトで2024年時点での導入は54万事業所ある。
会計ソフトなのでミッションクリティカルなシステムとは違い、障害が重大な影響(損害)に繋がりにくいが、会計という業務と規模を考えると、長時間のシステムダウンは許されないシステムと言える。
また、会計は複雑な処理が多く、Rubyを採用した場合、設計方針(ルール)、コーディング規約などの決め事を細部までおこなわないと品質管理が難しい。

素晴らしいサービスであることは間違いなのだが、残念なのは「freee」の公式サイトには利用企業として「MS&AD」「野村証券」「関電」「川崎重工」「伊藤忠」「アイシン精機」「富士通」「三菱重工」など日本を代表する企業がロゴで紹介されている。
これらの企業は、独自の会計システムを構築しているかSAPを導入しており、会計処理に「freee」は利用していない。
サービスを大きく見せたい気持ちはわかるが、ユーザーに誤った認識を与えるような広告行為は節度ある企業のすることではない。
| サービス | 言語 | フレームワーク | データベース ミドルウェア | サーバー |
|---|---|---|---|---|
| freee | サーバーサイド: Ruby、Go、Java、Scala フロントエンド: Node.js、TypeScript、JavaScript、React、webpack、ESLint | サーバーサイド: Ruby on Rails フロントエンド: Jest | Aurora MySQL、DynamoDB、Redis、 Elasticsearch、 Datadog、 Insight Hub(BugSnag)、 CI/CD(GitHub Actionss、CircleCI、ArgoCD) | AWS(EKS、S3、SQS、Kinesis、Lambda) |
| Cookpad | Ruby | Ruby on Rails | ||
| 食べログ | Ruby | Ruby on Rails | ||
| クラウドワークス(Web) | サーバーサイド: Ruby フロントエンド: JavaScript, TypeScript, CoffeeScript | サーバーサイド: Ruby on Rails フロントエンド: Vue.js | Amazon(RDS), Elasticsearch | Amazon(ECS, ALB, RDS, S3, Redshift, ElastiCache, SQS, SNS), Google(BigQuery) |
| クラウドワークス(アプリ) | Swift、Kotlin |
資料 Ruby Association Ruby活用事例 freee株式会社 | Ruby Association
資料 Ruby Association Ruby活用事例 株式会社クラウドワークス | Ruby Association
資料 freee Developers Hub Ruby カテゴリーの記事一覧 - freee Developers Hub
資料 freee Developers Hub Ruby on Rails カテゴリーの記事一覧 - freee Developers Hub
資料 freee Developers Hub Ruby on Rails カテゴリーの記事一覧 - freee Developers Hub
資料 freee Developers Hub AWS カテゴリーの記事一覧 - freee Developers Hub
資料 日経クロステック マイクロサービスとモジュラーモノリスが併存、これがfreeeの最適解 | 日経クロステック(xTECH)
資料 クックパッド開発者ブログ クックパッド開発者ブログ
資料 Tabelog Tech Blog Tabelog Tech Blog
資料 ElasticsearchElasticsearch:公式分散検索および分析エンジン | Elastic
資料 ElasticsearchElasticsearch & 導入支援 | NTTテクノクロス株式会社
資料 ECS(Amazon Elastic Container Service) Amazon ECS(Docker コンテナを実行および管理)| AWS
資料 ALB(Amazon Application Load Balancer) Application Load Balancer | Elastic Load Balancing | Amazon Web Services
資料 ALB(Application Load Balancer) Application Load Balancer とは? - エラスティックロードバランシング | AWS
資料 RDS(Amazon Relational Database Service) Amazon RDS(マネージドリレーショナルデータベース)| AWS
資料 S3(Amazon Simple Storage Service) Amazon S3(拡張性と耐久性を兼ね揃えたクラウドストレージ)|AWS
資料 Redshift(Amazon Redshift) Amazon Redshift(高速、シンプル、費用対効果の高いデータウェアハウス)| AWS
資料 ElastiCache(Amazon ElastiCache) Amazon ElastiCache(インメモリキャッシングシステム)| AWS
資料 SQS(Amazon Simple Queue Service) Amazon SQS(サーバーレスアプリのためのメッセージキューサービス)| AWS
資料 SNS(Amazon Simple Notification Service) Amazon SNS(サーバーレスアプリのための pub/sub メッセージングサービス)| AWS
資料 SNS(Amazon Kinesis) Amazon Kinesis(ストリーミングデータをリアルタイムで収集、処理、分析)| AWS
資料 SNS(AWS Lambda) AWS Lambda(イベント発生時にコードを実行)| AWS
資料 Google BigQueryGoogle BigQuery データ ウェアハウスから自律型データ AI プラットフォームへ | Google

コーディング規約が必要な理由は、既にご存知の方がほとんどだと思うが、だれもが好きなようにコーディングしてしまうと、可読性が極めて低い、読めないソースコードが出来上がってしまうからだ。
あらかじめルールを決めておくことで、可読性を担保できる。
特に、変数そのもの、変数の接頭辞は規約を作っておくことで、その変数が何を表しているか、どのプリミティブ型か、一目瞭然になる。
大昔、VBで変数に日本語(2バイト)を使ったアホがいたが、こういうアホや、for文のカウンターに、i、j、k、などはよく使用するが、i1、i2、i3・・・・のようなマジで読めないソースコードを書くアホを駆逐する為にコーディング規約は重要だ。
※個人的には、カウンターはcntI、cntJ、cntKのような接頭辞を付ける方が好きだが、これはソースが好きか醤油が好きか?という議論になると思う。
業務アプリなどでは変数そのものを規定する事も多い。「契約 contract」「検査 inspection」「予算 budget」「支払 payment」「委託事業 project」「補助事業 grant」など予め単語と変数名を決めておくことで可読性を担保できる。
「契約 keiyaku」「検査 kensa」「予算 yosan」「支払 shiharai」「委託事業 itaku」「補助事業 hojo」のようなローマ字での記述も馴染みがあるし、命名規約に定義しておけば可読性は上がるので、ローマ字記述でも良い。
※ローマ字記述がダメというプロジェクトも散見するが、意味不明な英単語を付けられるよりは、ローマ字記述の方が可読性は確実に高いので無理に英語を使用する必要はない。重要な事は可読性を第一に考える事で、英語にこだわって可読性を損ねるのは愚の骨頂だ。

プログラムは英語そのものだ。if、for、switch、do while、public、private、add、get、set、put、trim、claer、remove、などなど。
クラス、メソッド、プロパティ、変数、それぞれ正しい英語表記で命名すれば、英文としてきちんと読めるようになる。
英語圏の人(英語ができる人)にとっては単なる文章なので、普通に読めて当然だ。
問題は英語ができない日本人で、英語ができない日本人にとって、forも、ifも、switchも、すべてコマンドとして認識しており、クラス、メソッド、プロパティ、変数もそれぞれ、単なるコード(バーコードようなもの)化してしまう。
その結果、作成されたソースコードは全く読めないものが出来上がる。
UNIXのソースコードを読んだことがある人は、おおよそソースコードは読み物であると理解している。可読性は高くはないけどね。
※困るのが、英語を普通に読み書きできるが、アホで英語のできない日本人を考慮しないプログラマーだ。彼らは思いつくままソースコードを書いた結果、英語のできない日本人には読めないソースコードになる事があるので、嫌がるが規約で縛りつけるしかない。
日本語しかできないコーダーはとても多いので、コーディング規約、命名規約で縛りつけて、可読性を担保する事が重要だ。

どのようなクラス、メソッド、プロパティにもコメントは必ず書く必要がある。コメントの記述ルールもコーディング規約で細かく定義する必要がある。
「コメントの始まり、機能、引数、戻り値、コメントの終わり」など、記述方法をキッチリ決める必要がる。
特に「javadoc」や「サードパーティー」のドキュメント出力ツールを使用する場合は、100%使用するツールに沿って記述する必要があり、例外は許してはいけない。
日本語しかできないコーダーは、コメントに関しては従順な有能なコメントを書くのだが、ここで問題なのは、英語ができる有能なプログラマーで、彼らはソースコードそのものが文章なので、コメントなど必要ないという考えを持っている人も多い。
彼らのように有能なプログラマーだけなら、複雑な機能以外コメントを書かないという選択もあるかもしれないが、多くはソースコードは単なるコードそのものにしか見えないコーダーなので、読む人の事を考えないプログラマーは無能だと思い、ここでも規約で縛りつけよう。
そもそも、コメントとは補足と考えているプログラマーもいるが(特に英語ができるプログラマー)、コメントは設計書の一部と考えるべきである。
ソースコードの中に書くコメントは確かに補足だが、クラス、メソッド、プロパティの最初に「機能、引数、戻り値」などを書くコメントは設計書の一部である。
設計書の役割は、後々、仕様変更などのメンテナンスで必須になるので、コメントはソースコードと同様に重要だ。設計書とソースコードが一致しないなど言語道断なのである。
インデント(字下げ)とはソースコードを読みやすくするため、行を下げる事である。
インデントはタブでおこなう。
タブおこなうメリットは「インデント1つ = タブ1つ」を徹底しやすく、高い可読性と保守性を実現できるためだ。
半角スペースでインデントをおこなうケースもあるが、半角スペースでおこなった場合、プログラマーに「インデント1つ = 半角スペース4つ」などのような、同一数のスペースで字下げするルールを徹底する必要があり、現実的に徹底するのは難しくなる。
特に、深いネストや条件分岐でインデントが連続して続く場合、半角スペースの数を確認するのが難しくなり、ズレが生じる可能性が高い。
また、ヒューマンエラーは必ず起こるので、インデントの半角スペース数を決めても、一定数のズレは生じる。
その点、タブをインデントに使用した場合、深いネストでもインデントを目視で確認しやすく、ズレが生じる可能性は極めて低い。同様にヒューマンエラーによるズレも起きにくい。
プログラマーによっては「インデント1つ = 半角スペース2つ」の方が良い、「インデント1つ = 半角スペース4つ」の方が見やすい、慣れているなどの理由でルールに従わないプログラマーもいるが、タブで統一した場合は「インデント1つ = タブ1つ」がほぼ100%共通認識なので、ルールを遵守させやすい。

エディターの設定で、Tabキーで自動的に決まった半角スペースを自動入力する機能もあるが、ソースコードに半角スペースが埋め込まれている事に代わりはなく、修正を加えるなどした場合にズレは一定数生じてしまい保守性は落ちる。
GitHubなどのソースコードの管理ツールを使用した場合、半角スペースでインデントすると、半角スペース1文字でもズレていれば変更ありと判断され、バージョン違いになる。
可読性、保守性から、タブでおこなうべきで、半角スペースでインデントをおこなうメリットはない。
なぜプログラマーは規約を嫌うのか?
答えは単純で、自分の癖を直したくないからだ。

例えば箸を正しく使う事が出来ない人がいる。彼は箸をバッテンで挟むように使う。正しい使い方ではないが、特に困る事もない。直す必要性がないのだ。
恥を書くのは、本格的な日本料亭では恥をかくことになる。彼女の両親と食事に行った時も、ハズカシイ思いをするかもしれない。
ただ、恥をかくのは彼一人の問題だ。
プログラムは違う。癖を直さず書いた結果、他人が読むのに苦労する。もしくは読解不可能なスパゲッティプログラムになる可能性もある。
プログラムの製造では、属人的な要素は全て排除すべきだ。わずかでも残せば、メンテナンスで苦労する事になり、将来のリプレイス時には確実に面倒な事になる。
癖を押し付けるプログラマーはどういう人種なのか?
プロジェクト・プロダクトに長い間コミットしない短期労働者か、または全く逆で、長期間コミットするが、チームプレイを必要としない労働者だ。
規約とは法律と同じで、日本人なら法治国家である日本の法律は遵守しなければならない。法を犯せば罰せられる。
沢山の人が平和に建設的に生きていく為にはルールが必要で、それが法律だ。
システムの設計・製造も同様で、現在から未来において関わるすべての人が、健全に建設的活動ができるように、統一されたルールに基づき可読性の高いコードを生産する必要がある。
コーディング規約を守らないプログラマー・コーダーがいれば、法律違反と見なし、厳しく罰しなければいけない。妥協してはいけない。妥協が将来のシステムを歪める事になる。

多くのシステム開発は「予算、納期、品質」のいずれかを守れない。日本の全システム開発の80%以上が「予算、納期、品質」のいずれかを守れていないのが現実だ。
プロマネはなんとか納期までに間に合わせようと必死になり、長期的な視点を欠き、目に見えない品質を軽視する。
生産性が高いプログラマーのワガママを許している多くの現場は、炎上か?炎上寸前の現場だ。
その結果システムが出来上がっても中身はボロボロで、メンテナンスもコストも想定外の自体に直面する。
プロジェクトの概念設計段階で「予算、納期、品質」が適切か?十分な調査が成されていれば、プロジェクトに携わる人々の質に問題がなければ、いずれの問題も生じない。
「安く」「早く」を要求されても、それは不可能だ。そのような要求は飲めないし、そのような要求を容認するSIerにお願いするのが良いと苦言できないエンジニアは、毎回炎上していればいい。
優秀なエンジニアなら「予算、納期、品質」を十分に守れる提案をする。お客様の要件に変更があった、または追加されたなら「予算の見直し」「納期の延長」、SIer側に問題が発生したら「品質」を担保するために「納期の延長」を申し出る。
優秀なエンジニアなら、どんなに生産性の高いプログラマーでもルールを守らないなら、生産性の低いプログラマー以下の存在で、注意・警告しても守らないならプロジェクトから追放しなくてはならない。
「我々チームは、ジャズのセッションのようなものだ」と私の恩師は自分のチームを表現した。対局にあるのが「クラシックを演奏するオーケストラだ」とも。
ジャズのセッションは「スタンダード曲(ジャズ・スタンダード 代表的なもので約200曲)」があり、セッションの作法があり、それらの組み合わせやアレンジを即興で演奏する。
何もないところからノリで演奏しているわけは全くない。
オーケストラで演奏するクラシックは楽譜があり、指揮者の裁量によるが楽譜どうりに演奏する。ジャズのセッションのような自由度はない。
ブラジル型のサッカーとイタリア型のサッカーの違いとも言える。ブラジル型のサッカーは大まかなポジションはあるが、パスか?ドリブルか?シュートか?はプレイヤーの裁量に任せられている。
イタリア型のサッカーはフォーメーション(厳密なポジション)があり、プレイスタイルはパスサッカーだ。プレイヤーの裁量という意味がブライジル型とは大きく異なる。
彼が言いたいのは、状況に応じて臨機応変にコンサルタントやエンジニアが、最良の結果を出す為に即興でそれぞれ行動し(ポジショニング・準備)、それぞれ最高のプレイをして(ドリブル・パス)、最終的に最良の結果(ゴール)を決めると言うものだ。
全て暗黙の合意(意思疎通)でおこなってしまう。
全員スーパーマンレベルのエンジニアでないとできない。通常そんなスーパーマンばかりのチームを作れるわけない。
だが、彼のチームは事実そうだった。
例えば年度予算が3兆円越え、ユーザーが1万人越えの組織の予算管理システムを、要件定義から運用まで6ヶ月で実現してしまう。今から20年以上も前なのでローコード開発など存在しないスクラッチの世界だ。
コンサルタントSEが顧客と大まかなシステム要件を洗い出し、要件定義と平行してモデル・ドリブン・アーキテクチャのフレームワークを作成、平行して実装できる機能を実装する。
スパイラルともアジャイルとも、プロトタイピングとも違う。
ウォータフォールで行ける部分は確実にウォータフォールで工程を進め、要件がフワフワしている部分はプロトタイピングで毎週顧客とイメージを擦り合わせ、完成度を高める。
全行程は統一感がなく、属人的に進めているようでありながら、並行して開発している強力なフレームワークに適合できるようにインターフェースを整えていく。
ソースコードは規約に沿って作られていくので、可読性は十分に担保されている。
最終的にフレームワークに乗せた時には、フレームワークの強力な拘束力と明確なインターフェースで、システム全体の可視化が容易になる。
試験は全行程の30%以上が充てられ、完成した機能から順次行われる。単体、結合、総合という工程はあるが、製造工程の品質が高いので、総合に十分なリソースを充てる事ができる。
要件定義→基本設計→詳細設計→製造→環境構築→試験→教育→運用まで、コンサルタントSE、SEは全員、全行程おこなう能力がある。プログラマも要件定義と基本設計の一部、教育を除く全行程できる。
それぞれ得意工程があるが、どの工程も高いレベルでできるので、全ての工程でもミス、モレがない。
オーケストラ型の開発はウォータフォールだ。
厳密なルールに沿って各工程を完璧に行い、次の工程に進めていく。前の工程に戻す必要があれば現在の工程はストップして前の工程に戻る。問題を完全に解消してから次の工程に進める。
全行程、徹底的にドキュメント化し、ドキュメントに沿って開発を行う。実装段階では考える余地がない程、ドキュメント上で詳細な設計を行う。
必要な修正があっても必ずドキュメントを修正し、レビューし、承認作業を経て実装される。
SEが製造をおこなう事はほぼないし、PGが設計をおこなう事もない。上流から下流まで一直線に進めていく。
ウォータフォールのメリットは各工程を完璧におこなう事で、出戻りが発生しない事だ。工程管理がしっかりできるので、大規模開発はウォータフォール以外の選択肢はないと言っていい。
ウォータフォールで進める場合、工程が予定通りに進まないと「予算、納期」に大きな影響が出る。
予定通りに進まない工程があった場合、他の工程を圧縮して「予算、納期」を計画通りにする事は不可能だ。スパイラルやアジャイルのような自由度はない。
スーパーマンも必要ない。ウォータフォールを採用するメリットは、一般的なSEやPGが粛々と作業をする事でリリースまで進められることだ。
開発規模の大きさに比例してプロジェクトに必要な技術者の数も多くなる。大規模開発では全員が歩調を合わせて進むことが大切だ。

プログラムの製造(開発)における命名規約は、可読性を担保するために必須の規約だ。
たとえばJavaの場合、変数がプリミティブの場合、変数の前に接頭辞をつける。
| クラス | 接頭辞 | 例 |
|---|---|---|
| boolean | bln | blnRetun |
| byte | byt | bytValue |
| short | sht | shtValue |
| int | int | intValue |
| long | lng | lngValue |
| float | flt | fltValue |
| double | dbl | dblValue |
| char | chr | chrValue |
メソッドやクラスの機能を表す接頭辞をつける。
| 機能を表す接頭辞 | 意味 | 例 |
|---|---|---|
| get | 取得する | getValue |
| set | 設定する | setValue |
| is | 判定する。戻り値はbooleanで返す事が多い | isNull isEmpty isNumeric |
| cnt | for文の中などでで使用するカウンター | cntI cntJ cntK |
| add | 追加する | addValue |
| del | 削除する | delValue |
| remove | 削除する ※通常の削除するを意図する場合はdelを使用する | delValue |
| compare | 比較する | compareValue |
| replace | 置き換える | replaceValue |
| trim | 前後の空白文字を削除する | trimValue |
| reverse | 逆にする | reverseValue |
| clear | 初期状態にする | clearValue |
| reset | 初期状態にする | resetValue |
| sort | ソートする | sortqArray |
| copy | コピーする | copyValue |
| plus | プラスする | plusValue |
| minus | マイナスする | minusValue |
| exists | 存在判定する | existsFile |
| create | 作成する | createFile |
| upd | 更新する | updValue |
| read | 読み込む | readValue |
| slc | 選択する | slcValue |
| to | 変換する | toDouble |
| sql | sqlを作成する。もしくはsqlを作成し実行する | sqlHogeTable |
| slc | 取得する(sqlのselect) | slcContract |
| ins | 新規作成する(sqlのinsert) | insContract |
| upd | 更新する(sqlのupdate) | updContract |
| del | 削除する(sqlのdelete) | delContract |
よく使う英単語。
| 機能を表す接頭辞 | 意味 | 例 |
|---|---|---|
| validateCheck | 整合性を検証する | |
| checkDirty | 入力項目が変更されているかチェックする | |
| qty | 数量。quantityの略語。 | Select count(*) as qty のように使用する。 |
| clear | 変数、オブジェクトのプロパティなどの内容を消去する。 | |
| array | 配列 | |
| list | 順序付けられた配列 | |
| add | 追加する | |
| create | 作成する | |
| delete | 削除する | |
| remove | 削除する ※通常の削除するを意図する場合はdelを使用する | |
| start | 開始する | |
| stop | 停止する | |
| first | 最初 | |
| last | 終わり | |
| first | 最初 | |
| last | 最後 | |
| min | 最小 | |
| max | 最大 | |
| top | 頂点 | |
| bottom | 底辺 | |
| up | 上げる | |
| down | 下げる | |
| under | 下回る | |
| over | 上回る | |
| before | 適用前 | |
| after | 適用後 | |
| open | ファイルやソケットを開く | |
| close | ファイルやソケットを閉じる | |
| commit | 確定する | |
| fetch | 取得する | |
| post | 投稿する | |
| read | ファイルやポートを読み出す | |
| write | ファイルやポートに書き込むす | |
| enable | 有効にする | |
| disable | 無効にする | |
| show | 表示する | |
| hide | 非表示にする | |
| padding | padding zeroのように使用する。0で埋める。 | |
| normal | 正常 | |
| error | 異常 | |
| header | ヘッダー | |
| footer | フッター | |
| connect | 接続する | |
| disconnect | 切断する | |
| input | 入力する | |
| output | 出力する | |
| import | インポート | |
| export | エクスポート | |
| encode | エンコード | |
| decode | デコード | |
| download | ダウンロード | |
| upload | アップロード | |
| request | 要求、リクエスト | |
| response | 返答、レスポンス | |
| upper case | 大文字 | |
| lower case | 小文字 | |
| header | ヘッダー | |
| footer | フッター |
![]() | 10日で使えるPHP | 未経験のサルでも分かるPHPの学習サイト 文系未経験、サルでも10日でPHPを使えるように内容を構成した独学向け学習サイト。不要な基礎はバッサリ切り捨て必要な基礎を十分に深堀した・・・ 続きを見る |