<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>実務 &#8211; エンジニア見習い</title>
	<atom:link href="https://otonan-syusyoku.work/archives/tag/%E5%AE%9F%E5%8B%99/feed" rel="self" type="application/rss+xml" />
	<link>https://otonan-syusyoku.work</link>
	<description>三流プログラマー</description>
	<lastBuildDate>Wed, 14 Jan 2026 06:26:24 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://otonan-syusyoku.work/wp-content/uploads/2023/10/cropped-名称未設定のデザイン-16-32x32.png</url>
	<title>実務 &#8211; エンジニア見習い</title>
	<link>https://otonan-syusyoku.work</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【CDK】LAMP環境を題材に考えるスタック間のリソース共有が難しい問題を解決する</title>
		<link>https://otonan-syusyoku.work/archives/2194</link>
					<comments>https://otonan-syusyoku.work/archives/2194#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Wed, 14 Jan 2026 06:26:23 +0000</pubDate>
				<category><![CDATA[インフラ]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[LAMP]]></category>
		<category><![CDATA[Typescript]]></category>
		<category><![CDATA[実務]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=2194</guid>

					<description><![CDATA[こんちゃーす。最近 CDK と格闘している PHPer です。 CDK、楽しいですよね。Typescript でインフラがかけるなんて最高です。でも、学習を始めていくとある壁にぶつかりました。 ネット上の「CDKでECS [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>こんちゃーす。最近 CDK と格闘している PHPer です。</p>



<p>CDK、楽しいですよね。Typescript でインフラがかけるなんて最高です。でも、学習を始めていくとある壁にぶつかりました。</p>



<p>ネット上の「CDKでECS構築してみた！」系の記事を参考にすると、大抵の場合 <strong>VPCもECSもRDSも全部一つの</strong> <code>lib/my-stack.ts</code> <strong>に処理が書かれている」</strong>のです。サンプルコードとしてはわかりやすいのですが、いざ実務でLMAP環境を作ろうとすると⋯…</p>



<ul class="wp-block-list">
<li>VPC は更新頻度が低いからスタックを分けたい</li>



<li>RDS はステートフルだから独立させたい</li>



<li>ECS はアプリケーションコードのデプロイで頻繁に更新が入るかも</li>
</ul>



<p>とスタックを分割したくなりませんか？<br>でも、分割した途端に「StackA で作ったVPCのIDをどうやってStackBにわたすの？」という問題が発生します。</p>



<p>当記事では、現時点での私の持論である <strong>スタック間のリソース共有</strong>を紹介します。</p>



<p></p>



<h2 class="wp-block-heading">IDではなくオブジェクトを渡す</h2>



<p>VPC スタックとECSスタックを分けるときに、ついやってしまいがちなのが <strong>VPC IDを Props で渡す</strong> という手法です。<br>Terraform に慣れていると、この発想になりがちですよね。</p>



<p>この手法では CDK の 型安全を活かすことが出来ないので、 <strong>VPCオブジェクトそのもの</strong> を渡すのがベストだと考えています。</p>



<p>私の構成案：<br>司令塔となる エントリーポイント <code>app</code> がバケツリレーのようにオブジェクトを渡していくイメージです。</p>



<ol class="wp-block-list">
<li>VPCStack： VPCを作る。 <code>public readonly vpc</code>でVPCオブジェクトを公開する</li>



<li>APP： VpcStack からVPCオブジェクトをもらい、 ECSStackに渡す</li>



<li>EcsStack： 受け取ったVPC オブジェクトを使ってクラスターを作る</li>
</ol>



<p>実際にコードを見ていきましょう。</p>



<h2 class="wp-block-heading">型安全の恩恵を受ける</h2>



<h3 class="wp-block-heading">VPCStack ⇒ 渡す側</h3>



<p>ここでは <code>this.vpc</code>をクラスのメンバ変数として公開しておきます。</p>



<pre class="wp-block-code"><code>// lib/vpc-stack.ts
import * as cdk from 'aws-cdk-lib';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import { Construct } from 'constructs';

export class VpcStack extends cdk.Stack {
  // 外部に公開するプロパティ（これが重要！）
  public readonly vpc: ec2.IVpc;

  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    this.vpc = new ec2.Vpc(this, 'LampVpc', {
      maxAzs: 2,
    });
  }
}</code></pre>



<p></p>



<h3 class="wp-block-heading">EcsStack ⇒ 受け取る側</h3>



<p>ここがポイントデス。 <code>vpcId: string</code>ではなく、 <code>vpc: ec2.IVpc</code> というインターフェース型で受け取ります。</p>



<pre class="wp-block-code"><code>// lib/ecs-stack.ts
import * as cdk from 'aws-cdk-lib';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import * as ecs from 'aws-cdk-lib/aws-ecs';
import { Construct } from 'constructs';

// Propsの定義：文字列ではなく「VPCの型」を指定する
interface EcsStackProps extends cdk.StackProps {
  vpc: ec2.IVpc;
}

export class EcsStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props: EcsStackProps) {
    super(scope, id, props);

    // 文字列から検索する必要なし！そのまま使える
    const cluster = new ecs.Cluster(this, 'LampCluster', {
      vpc: props.vpc, 
    });
  }
}</code></pre>



<p></p>



<h3 class="wp-block-heading">bin/app.ts ⇒ 繋ぐ場所</h3>



<p>最後にエントリーポイントで紐づけます。</p>



<pre class="wp-block-code"><code>// bin/app.ts
import * as cdk from 'aws-cdk-lib';
import { VpcStack } from '../lib/vpc-stack';
import { EcsStack } from '../lib/ecs-stack';

const app = new cdk.App();

// 1. VPCを作る
const vpcStack = new VpcStack(app, 'VpcStack');

// 2. VPCオブジェクトをECSスタックに渡す
const ecsStack = new EcsStack(app, 'EcsStack', {
  vpc: vpcStack.vpc, // ここでバケツリレー
});</code></pre>



<p></p>



<h3 class="wp-block-heading">この方法の何が良いの？</h3>



<p>この方法のメリットは2つあると思っています。<br>（一言で言うとプログラミング言語による抽象化です。）</p>



<ol class="wp-block-list">
<li>圧倒的な型安全性<br>もし間違えてS3のオブジェクトを渡そうとすると、エディタがその場でエラーを吐いてくれます。<br>「デプロイしてみたらIDが違ってコケた」という悲劇が未然に防げます</li>



<li>記述がメチャ楽<br>受け取る側で <code>ec2.Vpc.fromLookup()</code> のようなインポート処理を書く必要がありません。渡された瞬間から <code>props.vpc.addInterfaceEndpoint</code> のようにメソッドが使えます</li>
</ol>



<p></p>



<h2 class="wp-block-heading">議論したいポイント</h2>



<p>ここまで「これが正解だ」という顔で書いてきましたが、実はこの構成には明確なデミリットもあります。それは、<strong> スタック同士が密結合</strong> になることです。</p>



<p>Cloudformation の <code>Export/Import</code> 機能でガッチリ紐づいてしまうため、以下のような問題が置きます。</p>



<ul class="wp-block-list">
<li>スタック間の参照があるため、「VPCだけを作り直したい」が出来ない</li>
</ul>



<p>ただし、私は上記のような問題が発生したとしても、<br>LAMP 環境という一つのアプリケーションにおいて、VPCとECSは「運命共同体」にあたるため問題ないと考えています。</p>



<p>「ECSが生きているのにVPCだけ消したい」という状況は稀ではないでしょうか。そのためこの<strong>密結合はあえて受け入れるべき仕様</strong>だと割り切っています。</p>



<p>ただ、もし組織の基盤となる共通のVPCを作る場合は、ライフサイクルが異なるため、疎結合なID渡しにするのが正解なのかもしれません。</p>



<p>皆さんの構成おしてほしいっす。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/2194/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>とりあえず出力していたログから意図を持ったログにするために</title>
		<link>https://otonan-syusyoku.work/archives/2189</link>
					<comments>https://otonan-syusyoku.work/archives/2189#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Wed, 07 Jan 2026 02:42:51 +0000</pubDate>
				<category><![CDATA[生涯独学]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[実務]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=2189</guid>

					<description><![CDATA[「ログ、とりあえず出してますか？」 正直に告白します。僕はこれまで、なんとなくログを出していました。「エラーが起きたら怖いから、とりあえず try-catch してログに残しておこう」「ないよりはマシだろう」 でも、いざ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>「ログ、とりあえず出してますか？」</p>



<p>正直に告白します。僕はこれまで、なんとなくログを出していました。<br>「エラーが起きたら怖いから、とりあえず <code>try-catch</code> してログに残しておこう」<br>「ないよりはマシだろう」</p>



<p>でも、いざ本番で障害が起きたとき、そのログは僕を助けてくれませんでした。<br>深夜のアラート対応で、システムエラーが発生しました とだけ書かれたログを前に途方に暮れた経験、皆さんにもありませんか？</p>



<p>今回は、そんな「なんとなくログ」を卒業し、トラブルシューティングや分析に本当に役立つ「使えるログ」を設計するために学んだことをまとめました。</p>



<h2 class="wp-block-heading">ログの目的を再定義する</h2>



<p>そもそも、なぜログを書くのでしょうか？ チームで決まっているからではなく、エンジニアとして以下の3つの目的を意識する必要があります。</p>



<ol start="1" class="wp-block-list">
<li><strong>トラブルシューティング（Why &amp; Where?）</strong>
<ul class="wp-block-list">
<li>「なぜ落ちたのか」「どこで落ちたのか」を特定し、バグを再現・修正するため。</li>
</ul>
</li>



<li><strong>可観測性・分析（Observability）</strong>
<ul class="wp-block-list">
<li>「この機能、どれくらい使われてる？」「処理に何秒かかってる？」といったシステムの健康状態やユーザー行動を知るため。</li>
</ul>
</li>



<li><strong>監査・セキュリティ（Security）</strong>
<ul class="wp-block-list">
<li>「いつ、誰が、重要なデータを変更したか」の証跡を残すため。</li>
</ul>
</li>
</ol>



<p>これらを意識すると、<strong>「とりあえず出力」ではなく「目的に合わせて出力」する必要がある</strong>ことに気づきます。</p>



<h2 class="wp-block-heading">構造化ログってなんや</h2>



<p>ログ設計を学ぶと必ず出てくるのが<strong>「構造化ログ（Structured Logging）」</strong>です。</p>



<p>構造化ログとは<strong>「ログを人間への手紙ではなく、機械へのデータとして扱う」</strong>ということです。</p>



<h3 class="wp-block-heading">非構造化ログ</h3>



<p>従来のテキスト形式のログです。</p>



<pre class="wp-block-code"><code>// 人間には読めるけど、機械（検索）には辛い
Log::error("User 123 failed to login from 192.168.0.1");
</code></pre>



<p>これだと、「ユーザーID 123 のエラーだけ集計したい」と思ったときに、正規表現で頑張って文字列解析をしなければなりません。<br>ログの文言が少し変わっただけで検索できなくなるので、運用が非常に辛くなります。</p>



<h3 class="wp-block-heading">構造化ログ</h3>



<p>ログをJSONなどの形式で出力します。</p>



<pre class="wp-block-code"><code>// メッセージとデータを分ける
Log::error("Login failed", &#91;
    "user_id" =&gt; 123,
    "ip_address" =&gt; "192.168.0.1",
    "event" =&gt; "auth_error"
]);
</code></pre>



<p>これが出力されると、以下のようなJSONになります。</p>



<pre class="wp-block-code"><code>{
  "level": "ERROR",
  "message": "Login failed",
  "context": {
    "user_id": 123,
    "ip_address": "192.168.0.1",
    "event": "auth_error"
  },
  "datetime": "2024-01-07T12:00:00+09:00"
}
</code></pre>



<p>こうしておけば、DatadogやCloudWatch Logsなどのログ管理ツールで <code>context.user_id = 123</code> のようにクエリ一発で検索・集計ができます。</p>



<p>現代のWeb開発では、<strong>ログは「読むもの」ではなく「検索・集計するもの」</strong>です。<br><strong>構造化ログはマスト</strong>と言えます。</p>



<h2 class="wp-block-heading">ログ設計の実践</h2>



<p>では、実際にコードを書くときに何を意識すべきでしょうか。</p>



<h3 class="wp-block-heading">やるべきこと</h3>



<h4 class="wp-block-heading">コンテキスト（文脈）を含める</h4>



<p>「エラーです」だけでは無意味です。<br>「その時何が起きていたか」の情報を連想配列（Context）として渡しましょう。</p>



<p>何が起こったかを把握するためにも 5W1H を意識するといいかもですね。</p>



<ul class="wp-block-list">
<li><strong>誰が？</strong> (User ID)</li>



<li><strong>何を？</strong> (Input Data)</li>



<li><strong>どこで？</strong> (Request URL, IP Address)</li>
</ul>



<h4 class="wp-block-heading">トレースID (Trace ID / Request ID) を通す</h4>



<p>これが今回一番の学びでした。 <br>「1回のリクエスト」に対して、ユニークなID（Trace ID）を割り当て、それを全てのログに含めます。</p>



<pre class="wp-block-code"><code>// 理想的なログ出力
{
    "message": "DB error",
    "request_id": "a0eebc99-9c0b...",  // これ
    "user_id": 101
}
</code></pre>



<p>これがあれば、マイクロサービスや非同期処理でログがバラバラになっても、<strong>IDで検索して「一連の処理の流れ」</strong>を追うことができます。</p>



<p>Laravelなどでは、ミドルウェアで自動的にIDを発行し、<code>Log::shareContext()</code> 等を使って全ログに自動付与する設定を入れておくと、コードを書くときに意識しなくて済むので最高です。</p>



<h4 class="wp-block-heading">ログレベルを適切に使い分ける</h4>



<p>チーム内の基準に従いましょう。ない場合は基準を決めておきましょう。</p>



<p>下記は一例です。</p>



<ul class="wp-block-list">
<li><strong>ERROR:</strong> 即時対応が必要（深夜でも電話がかかってくるレベル）。</li>



<li><strong>WARN:</strong> 異常だがシステムは稼働継続可能（後で要確認）。</li>



<li><strong>INFO:</strong> 正常系イベント（KPI分析や動作確認用）。</li>



<li><strong>DEBUG:</strong> 開発時のデバッグ用（本番では出さない）。</li>
</ul>



<h3 class="wp-block-heading">アンチパターン</h3>



<h4 class="wp-block-heading">機密情報の出力</h4>



<p>パスワード、アクセストークン、クレジットカード番号、個人情報（PII）をログに出してはいけません。</p>



<p>ログファイル自体が漏洩したときのリスクが甚大です。平文なのでね。</p>



<h4 class="wp-block-heading">「とりあえずcatchしてログ」による握りつぶし</h4>



<p>一番やりがちなやつです。</p>



<pre class="wp-block-code"><code>try {
    $user-&gt;save();
} catch (Exception $e) {
    // 最悪なパターン：エラーが起きた事実だけログして、処理を続行してしまう
    Log::error("Error happened"); 
}
</code></pre>



<p>これだと、データ不整合が起きているのにシステムが動き続け、後で原因不明のバグになります。<br>対処できないエラーはログに出すだけでなく、適切に例外を再スローするか、エラーレスポンスを返す必要があります。</p>



<h2 class="wp-block-heading">ログ運用</h2>



<p>「ログをどこに出すか」も重要です。</p>



<p>DockerやKubernetesなどのコンテナ環境では、<strong>「標準出力（stdout/stderr）に吐く」</strong>のが定石です（<a href="https://12factor.net/ja/logs">The 12-Factor App</a>の思想）。</p>



<p>アプリは標準出力にJSONを流すだけ。あとはFluentdやDatadog Agentがそれを拾って、S3やログ管理基盤に転送する。アプリは「ログの保存場所」に関知しない設計にするのがモダンな運用です。</p>



<h2 class="wp-block-heading">5. ログローテート</h2>



<p>最後に、地味だけど大事な「お掃除」の話です。 もしファイルにログを出力する場合、書き続けるといつかディスクが溢れます。数GBのテキストファイルを開こうとしてエディタが固まった経験、ありますよね？<br>（いつぞやに対応したEC2のアラート対応で、15GBのログファイルがサーバーを圧迫していた事件がありました。）</p>



<ul class="wp-block-list">
<li><strong>ローテート（Rotation）：</strong> 日次やサイズ指定でファイルを分割する（例: <code>app.log</code> -> <code>app.log.2024-01-07</code>）。</li>



<li><strong>保持期間（Retention）：</strong> 「14日経過したら削除する」といったルールを決める。</li>
</ul>



<p>PHP（Monolog）なら <code>RotatingFileHandler</code> を使うことで簡単に実装できますし、Linuxの <code>logrotate</code> コマンドで管理することもあります。</p>



<p>「ディスクフルでサーバーダウン」は一番悲しい障害なので、リリース前に必ず確認しましょう。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">おわりに</h2>



<p>ログ設計を見直すことは、「未来の自分やチームメイトへの思いやり」です。</p>



<p>障害発生時、適切なログ（構造化され、Trace IDがあり、必要な情報が詰まっているログ）があれば数分で解決できる問題が、ログがないために数日かかることもあります。</p>



<p>「何かあったときに、このログを見て原因がわかるか？」 「一年後の自分がこのログを見て感謝するか？」</p>



<p>そう自問しながら、明日からの <code>Log::info()</code> を書いていきたいと思います。</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/2189/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>炎上案件を経験して死にに行くという姿勢を持てば良かったという話</title>
		<link>https://otonan-syusyoku.work/archives/1482</link>
					<comments>https://otonan-syusyoku.work/archives/1482#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Thu, 08 Feb 2024 12:08:08 +0000</pubDate>
				<category><![CDATA[仕事の独り言]]></category>
		<category><![CDATA[業務]]></category>
		<category><![CDATA[ポエム]]></category>
		<category><![CDATA[実務]]></category>
		<category><![CDATA[本当にあった話]]></category>
		<category><![CDATA[脱3流プログラマー]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1482</guid>

					<description><![CDATA[プログラマーやエンジニアをやっている人なら分かると思うのですが、「炎上案件」という言葉には一種のドキドキがあるかと思います。 僕は炎上案件という言葉を聞くだけでドキドキが止まりません。 今回の記事では、受託企業でバチバチ [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>プログラマーやエンジニアをやっている人なら分かると思うのですが、「炎上案件」という言葉には一種のドキドキがあるかと思います。<br />
僕は炎上案件という言葉を聞くだけでドキドキが止まりません。<br />
今回の記事では、受託企業でバチバチな炎上案件を経験してきた3流プログラマーが炎上案件の思い出を語らせていただければと思います。</p>
<h2>炎上案件とは？</h2>
<p>何らかの理由でとにかく燃えている案件のことです。</p>
<ul>
<li>シンプルな短納期（多分炎上の理由1位）</li>
<li> チーム内における重要人物のプロジェクトからの離脱</li>
<li>神様（クソ客）による土壇場での仕様変更</li>
<li>イキり営業による全てできますスタイルによる契約</li>
</ul>
<p>プロジェクトに関わるすべての人が何かしらに追われている状況になるため、関係者各位で揉め事が起こっています。<br />
ステークホルダー &gt; 営業 &gt; PL &gt; SE &gt; プログラマー</p>
<p>僕が経験した炎上案件では、<span class="sc_marker blue"><strong>短納期 + 急な仕様変更（馬鹿な営業のせい） により開発と営業の間で戦争が勃発しプロジェクトが崩壊しかけた</strong></span>事があります。<br />
最終的には<strong>客先への調整（謝罪） + 営業と開発の戦争に部長が仲裁する形</strong> で終着することでギリギリのところで丸く収まりました。</p>
<p>しかし一度崩壊しかけたプロジェクトなのでチーム内でのいざこざは残ったまま開発を続けていくことになりストレスの掛かるプロジェクトでした。</p>
<p>このように<strong>炎上案件は誰も幸せになりません。</strong></p>
<p>今回は炎上案件について僕の実体験を簡潔にお話したのですが、一口に炎上案件と言っても様々な理由があることを覚えていただければ幸いです。</p>
<h2>炎上するとどんな事が起きるのか</h2>
<h3>お客さんに詰められる</h3>
<p><span class="sc_marker blue"><strong>受託企業における一番恐ろしいタイミングがお客様から詰められる時</strong></span>です。<br />
当たり前の話ですが、身銭を切ってシステム開発を依頼されているので、全力で詰めてきます。</p>
<p>お客さんが詰めるときはだいたい以下の理由かと思います。</p>
<ul>
<li>納期に間に合わない</li>
<li>契約時に想定していた要件を満たせていない</li>
</ul>
<p>これらの理由で怒られるのが本当に本当にストレスでした。(契約不履行と言われたときにはゾッとします。</p>
<h3>上長から詰められる</h3>
<p><span class="sc_marker blue"><strong>お客様から詰められるということは必然的に上司からも詰められます。</strong></span></p>
<p>お客さんからの評価が悪いと次回の契約や会社の評判が下がるといった悪影響が発生する可能性が高くなるため、上司もピリピリします。</p>
<p>炎上は炎上を生むだけです。</p>
<div class="sc_frame_wrap inline orange">
<div class="sc_frame_title">これはただの文句</div>
<div class="sc_frame">
<p>僕が居た受託企業の上司はIT畑の人ではなかったため、お客さんからの評価が第一になります。そのため、お客さんからどんなに理不尽な要求が来たとしても必ず達成することを譲りません。</p>
<p>そんなやり方では必ず大事故が起きるよという開発側の意見には聞く耳を持ちません。</p>
<p><strong>歪な形で進行した結果で起きている炎上には目をつぶる</strong> → <strong>結果さらに燃える</strong> というサイクルを発生させる上司でした。</p>
</div>
</div>
<h3>メンバーから不満が出る</h3>
<p>他方から詰められるとチーム内からも悲惨な声が聞こえてきます。</p>
<p>「後少しでリリースできるから一緒に頑張りましょう。」という声がけしかできません。</p>
<p>世知辛いです。</p>
<h2>炎上したときには死ににいく姿勢が大事</h2>
<p>ようやく本題です。</p>
<p>炎上案件に参画すると全員が「この案件から抜け出したい」と願っている事は目に見えるのですが、そういった願いは儚く散っていきます。どうにか納品することが唯一の地獄からの脱出する道です。</p>
<p>全員がギリギリのところで踏ん張っているタイミングでは<span class="sc_marker blue"><strong>率先して死にに行く姿勢がメンバーを勇気づけると考えています。</strong></span></p>
<p>一度プロジェクトを崩壊させた目線から思うことが<span class="sc_marker blue"><strong>誰かがアクセルを踏んで頑張ることが誰かの活力につながる</strong></span>ことを強くお伝えしたいです。</p>
<p>今炎上案件に参画している人はぜひ、死にに行く姿勢を持ってほしいなと思います。（限界だったら逃げてください。本当に逃げてください。）</p>
<h2>炎上案件は悪いことばかりではない</h2>
<p>精神的にしんどい事が多い炎上案件ですが、悪いことばかりではありません。</p>
<p>サイヤ人の理論と一緒でギリギリのところで生き抜くと確実に成長します。成長するのは技術力かもしれませんし、人間力かもしれません。</p>
<p><span class="sc_marker blue"><strong>とにかくあなたの何かが確実に成長します。</strong></span></p>
<p>また、炎上案件の凄いところが<span class="sc_marker blue"><strong>普通に過ごした期間と炎上案件に関わった期間の成長の度合いに大きな差があります。</strong></span></p>
<p>それだけ炎上案件には人を成長させるパワーがあります。</p>
<p>一度経験しておくのをオススメしますよ。</p>
<p>[getpost id=&#8221;1204&#8243; target=&#8221;_blank&#8221; cat_name=&#8221;1&#8243; date=&#8221;0&#8243;]</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1482/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【ジュニアPHPerに捧ぐ】PHPだけやってるのはマズイぞ</title>
		<link>https://otonan-syusyoku.work/archives/1519</link>
					<comments>https://otonan-syusyoku.work/archives/1519#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Sun, 10 Dec 2023 08:51:13 +0000</pubDate>
				<category><![CDATA[仕事の独り言]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[コーディング]]></category>
		<category><![CDATA[ポエム]]></category>
		<category><![CDATA[実務]]></category>
		<category><![CDATA[本当にあった話]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1519</guid>

					<description><![CDATA[fa-address-book対象読者 &#8211; プログラマ &#8211; IT業界1年目〜3年目 &#8211; PHPer 事の発端 副業案件を獲得するためにいくつかの面談を受けている際に面接官に言われた一言 [&#8230;]]]></description>
										<content:encoded><![CDATA[<div class="sc_frame_wrap inline orange">
<div class="sc_frame_title"><span class="sc_frame_icon"><i class="fa fa-address-book" aria-hidden="true"><span>fa-address-book</span></i></span>対象読者</div>
<div class="sc_frame">
<p>&#8211; プログラマ<br />
&#8211; IT業界1年目〜3年目<br />
&#8211; PHPer</p>
</div>
</div>
<h2>事の発端</h2>
<p>副業案件を獲得するためにいくつかの面談を受けている際に面接官に言われた一言です。</p>
<div class="voice left">
<div class="icon">
<p><img decoding="async" src="https://otonan-syusyoku.work/wp-content/uploads/2021/04/名称未設定のデザイン-7.png" /></p>
<div class="name">面接官</div>
</div>
<div class="text sc-inner-content sc_balloon left blue">
<p>PHP はネットに落ちているコードで簡単に作れるでしょ<br />
納期短いけどどうにかしてくれ</p>
</div>
</div>
<p>&nbsp;</p>
<p>いやぁ〜、恐ろしい。</p>
<p>要件次第で色が違ってくるのがシステム開発というもののハズですが、仕事という観点で見た際にPHPで作るシステムは簡単に作れるという考えを持っている人がいました。</p>
<p>なぜ、こうもPHPの立ち位置が低いのか僕なりに考えてみました。</p>
<p>（そもそも<strong>「PHPで作ればシステム開発は楽になる」</strong>という考え方事態がおかしいのですが。。</p>
<h2>PHPが舐められている原因</h2>
<h3>駆け出しが増えすぎた</h3>
<p><span class="sc_marker blue"><strong>PHPの業界内の立ち位置として駆け出しエンジニアが選択するファースト言語という特色</strong></span>があります。<br />
（かくいう僕も初めて選択した言語はPHPでした）</p>
<p>駆け出しエンジニアに選択されやすいという特色が故、ロースキルのプログラマが大量生産され、業界内での評価がガタ落ちしたのではないでしょうか。</p>
<p>また、2020年〜2023年の間にインフルエンサー達によるフリーランスの布教活動の波も影響していると思います。</p>
<p>仕事を発注する側から見た場合、経験年数が短く、「PHPできます」という人に対して不信感を抱くのも当然かもしれません。</p>
<h3>自由にかけてしまう</h3>
<p>PHPの特性について、コードの型を指定せずに書くことができる柔軟性があります。</p>
<p>これは素早くコードを記述できる利点を持つ反面、実行時にエラーが発生する可能性が高まります。<br />
この特性は、プログラムを実行するまでエラーが検知されないため、デバッグや修正が手間取ることがあります。</p>
<p>この柔軟性から「動くものは簡単に作れる」というイメージが生まれ、結果として経験豊富な開発者からはPHPが好まれない傾向にあります。<br />
一部のエンジニアは、この柔軟性が多くのインシデントやバグを引き起こす原因と見なしていることもあります。（僕の上司もPHPの言語仕様が嫌いです。笑）</p>
<p>特にセキュリティや安定性が求められる場面では、この特性がリスクとなることがあります。</p>
<h3>過去にインシデントが多数報告</h3>
<p><span>実際にPHPコードの柔軟性が原因でセキュリティ上の問題や重大なエラーが発生した事例が多く報告されています。</span></p>
<p><a href="https://jvn.jp/jp/all.html#y2022">CVEデータベース</a>を見てみてください。PHPの報告が多数上がっていますよ。</p>
<p>PHPに限らずインシデントの内容をチェックすると勉強にもなるので一度見に行ってみるのをオススメします〜</p>
<h2>じゃあPHPerはどうするの？</h2>
<h3>正しいPHPを学ぶ</h3>
<p>PHPの最新の機能や改善点を把握し、セキュアで効率的なコーディングを心掛ける必要があります。（エンジニアなら当たり前だろ！ってマサカリ飛んできそうですが笑）</p>
<p>かくいう僕もPHP8でリリースされたmatch式を知らなかった過去があります。しっかり学びましょう笑</p>
<p>また、静的型付け言語ほど厳格な型指定はできないのですが、<span class="sc_marker blue"><strong>PHPの型システムを利用したセキュアコーディング</strong></span>や<span class="sc_marker blue"><strong>ジェネレータを使用してメモリの過消費を防ぐコーディング</strong></span>を意識する必要があります。</p>
<h3>PHP以外にもスキル身に付ける</h3>
<p>新卒が優秀になってきていることやChatGPTの登場など、PHPだけができる人は本当に不要になってきているのを肌で感じます。</p>
<p>そのため、以下のどちらかに裾のを広げていく必要があると思います。</p>
<ul>
<li>PHP + フロント(React or Vue + TS)</li>
<li>PHP + インフラ</li>
</ul>
<p>僕はフロントがあまり得意ではないのでインフラ周りを勉強中です。</p>
<div class="sc_frame_wrap inline orange">
<div class="sc_frame_title"><span class="sc_frame_icon"><i class="fa fa-adn" aria-hidden="true"><span>fa-adn</span></i></span>PHP以外を身につけると</div>
<div class="sc_frame">
<p>PHP以外を身につけると明らかに単価がアップします。<br />
例えば、PHP + AWS のような案件や PHP + React + TypeScript の案件に携われる可能性が出てきます。<br />
PHPの枠を出ることによって確実に世界が広がるのでおすすめです。</p>
<div class="">
<a href="https://px.a8.net/svt/ejp?a8mat=3BBDRD+526ONU+3T80+609HT" rel="nofollow"><br />
</a><img fetchpriority="high" decoding="async" border="0" width="300" height="250" alt="" src="https://www23.a8.net/svt/bgt?aid=200405353306&amp;wid=002&amp;eno=01&amp;mid=s00000017784001009000&amp;mc=1" class="alignleft" /><a href="https://px.a8.net/svt/ejp?a8mat=3TNN5M+CAYJMI+45OW+5ZU29" rel="nofollow"><img decoding="async" border="0" width="300" height="250" alt="" src="https://www25.a8.net/svt/bgt?aid=231210490744&amp;wid=002&amp;eno=01&amp;mid=s00000019400001007000&amp;mc=1" /></a>
</div>
</div>
</div>
<p>&nbsp;</p>
<h2>PHPは素晴らしい言語だぞ</h2>
<p>近年のPHPは、安全性や効率性の向上に焦点を当てて進化しています。</p>
<p>例えば、PHP 8や8.1のリリースでは、型付きプロパティや名前付き引数など、新機能が追加されました。<br />
PHP8.2ではreadonly classがリリースされています。<br />
これにより、コードの品質向上やエラーハンドリングの改善が実現しました。</p>
<p>&nbsp;</p>
<p>そして何よりもPHPは数多くのシステム開発の実績を持っています。<br />
2023年においてちらほら「PHPはレガシーだ」という意見が出てきていますが、今も現役に稼働しているシステムが多数あります。</p>
<p>過去の先輩PHPer 達が遺してくれた数多くの仕事がまだまだ残っています。そしてこれからもまだまだ増えていくでしょう。</p>
<p>&nbsp;</p>
<p>何かと批判されがちなPHPですが、世の中に価値を届けることができる可能性に満ちた言語です。</p>
<p>正しい知識と幅広い知識を持ち合わせたPHPerになっていきましょう〜</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1519/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>macbookのDesktopでGit管理していたらコードが死んだ話</title>
		<link>https://otonan-syusyoku.work/archives/1530</link>
					<comments>https://otonan-syusyoku.work/archives/1530#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Thu, 07 Dec 2023 14:28:58 +0000</pubDate>
				<category><![CDATA[絶対に必要なIT基礎知識]]></category>
		<category><![CDATA[実務]]></category>
		<category><![CDATA[本当にあった話]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1530</guid>

					<description><![CDATA[ある日の出来事 チームに所属するインターン生から1つの相談がありました。 「やんやんさん、プログラムが動きません。。。」 &#160; 最初は「実行エラーだろう、エラー文言に何が書いてあるのか読めよ」と思っていたのですが [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>ある日の出来事</h2>
<p>チームに所属するインターン生から1つの相談がありました。</p>
<p>「やんやんさん、プログラムが動きません。。。」</p>
<p>&nbsp;</p>
<p>最初は<strong>「実行エラーだろう、エラー文言に何が書いてあるのか読めよ」</strong>と思っていたのですが、エラーの内容を読むと事態は思ったよりも深刻であることに気づきます。</p>
<table style="border-collapse: collapse; width: 100%;">
<tbody>
<tr>
<td style="width: 50%; background-color: #90d6fc; border-color: #ffffff;" rowspan="2">実際に起きた問題</td>
<td style="width: 50%;">よくわからないファイルの増殖<br />
ex) index.php, index 2.php</td>
</tr>
<tr>
<td style="width: 50%;">git コマンドが実行できない<br />
ex) git fetch, git pull</td>
</tr>
</tbody>
</table>
<h2>原因はiCloud</h2>
<p>原因はプログラムの配置場所がiCloudで管理しているDesktopに置いていることでした。</p>
<p>Gitで管理しているソースコードがiCloudとの同期が取れておらず、ファイルの増減がありプログラムが正常に動作しないという問題です。</p>
<p>Git（リモートリポジトリからのpull, ブランチの切り替え等）で管理しているはずのソースコードが裏ではiCloudでも管理されていたという間抜けな話でした。</p>
<p>みなさんもご注意を。。。。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1530/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【SES→受託→自社】エンジニア歴3年で形態の異なる会社で働いて思ったこと</title>
		<link>https://otonan-syusyoku.work/archives/1392</link>
					<comments>https://otonan-syusyoku.work/archives/1392#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Thu, 02 Nov 2023 14:21:32 +0000</pubDate>
				<category><![CDATA[仕事の独り言]]></category>
		<category><![CDATA[業務]]></category>
		<category><![CDATA[ポエム]]></category>
		<category><![CDATA[実務]]></category>
		<category><![CDATA[未経験エンジニア]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1392</guid>

					<description><![CDATA[巷で噂のエンジニアはどのような会社で働くべきか論争を見かけたのでSES → 受託 → 自社 と働く会社を移してきた僕から解説させてください。 エンジニア歴は短いのですが、これまでに以下の形態の会社で働いてきました。 SE [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>巷で噂の<strong>エンジニアはどのような会社で働くべきか論争</strong>を見かけたのでSES → 受託 → 自社 と働く会社を移してきた僕から解説させてください。</p>
<p>エンジニア歴は短いのですが、これまでに以下の形態の会社で働いてきました。</p>
<ul>
<li>SES</li>
<li>受託</li>
<li>自社</li>
</ul>
<p>そんな僕からエンジニアとして働くべき会社を解説します。笑</p>
<h2>SES 時代</h2>
<h3>入社した経緯</h3>
<p>まずは SES 時代です。</p>
<p>当時の僕は異業種からの IT 業界への転職を目指していたこともあり、IT 業界に対する知識が全くない状態でした。</p>
<div class="voice left">
<div class="icon">
<p><img decoding="async" src="https://otonan-syusyoku.work/wp-content/uploads/2023/10/名称未設定のデザイン-16.png" /></p>
<div class="name">当時のアホな僕</div>
</div>
<div class="text sc-inner-content think_balloon left blue">
<p>SES ？<br />
なにそれ？（鼻くそホジホジ）</p>
</div>
</div>
<p>&nbsp;</p>
<p>そのため手当たり次第に面接を受けまくっていた記憶があります。（今考えるとかなりアホですね。笑）</p>
<p>&nbsp;</p>
<p>当時の世界情勢的にはコロナが大流行していた時期ということもあり、求人数はかなり狭めらていた状況でした。<br />
そのような中、転職活動を進めていくにあたり戦略として以下の対策を講じました。</p>
<ul>
<li>自作のウェブアプリケーションを作る</li>
<li>資格を取得する</li>
<li>技術記事を書く</li>
</ul>
<p>[getpost id=&#8221;606&#8243; cat_name=&#8221;1&#8243; date=&#8221;0&#8243;][getpost id=&#8221;590&#8243; cat_name=&#8221;1&#8243; date=&#8221;0&#8243;]</p>
<p>&nbsp;</p>
<p>転職活動という大航海を戦うには心細い能力値の低い武器を揃えて旅に出ていたため、条件の悪い求人にしか出会うことが出来ませんでした。</p>
<div class="sc_frame_wrap inline orange">
<div class="sc_frame_title"><span class="sc_frame_icon"><i class="fa fa-arrow-circle-down" aria-hidden="true"><span>fa-arrow-circle-down</span></i></span>条件の悪い求人の代表例</div>
<div class="sc_frame">
<ul>
<li>家電量販店で勤務後、自己学習を行う。上長の技術的了承を得られたらシステム開発の現場に入れる</li>
<li>コールセンターで勤務（資格取得やITに関する知識を取り入れる事が目的らしい。</li>
</ul>
</div>
</div>
<p>&nbsp;</p>
<p>そんな中、あるSES会社と出会い入社をしました。</p>
<ul>
<li>僕の揃えた武器に対して「君は努力のできる人だと思う」と評価</li>
<li>先輩のアセットとしてシステム開発の現場に入れてもらえる</li>
</ul>
<p>中々良い出会いが無い未経験からの転職活動だったので、このSES会社に出会えた事はとても嬉しかったです。</p>
<h3>業務内容</h3>
<p>本当に末端の作業員だという内容の業務をこなしました。（未経験で入社したのでそれは仕方がない）</p>
<p>具体的には以下のような内容です。</p>
<ul>
<li>テスト仕様書に沿ってテストを実施する
<ul style="list-style-type: circle;">
<li>エビデンスをスクショし、 Excel に貼り付ける</li>
</ul>
</li>
<li>HTML で書かれているページを Excel におこす
<ul style="list-style-type: circle;">
<li>現在の画面を仕様書に残すため</li>
<li>Git 使えや。クソが。</li>
</ul>
</li>
<li>データ移行（DB移行）
<ul style="list-style-type: circle;">
<li>これは勉強になった</li>
</ul>
</li>
</ul>
<h3>良かったこと</h3>
<p>未経験からの IT業界への初参入ということだったので、全てが学びになったという自負があります。</p>
<p>質問の仕方や会話の仕方など他の業界とは異なっている事を知れたのはエンジニアとしての学びでした（特に質問の仕方は何度もご指導いただきました。笑）</p>
<p>また、システム開発の概要を知れたのはかなり大きかったです。<br />
<span class="sc_marker blue"><strong>多くの人がそれぞれの役割をこなし、納期や予算と戦いながらゴールに向かった進んでいく姿勢はプログラムを書くだけが仕事ではないという事を学ぶことが出来ました。</strong></span></p>
<p>その他にも何かしらの病気を抱えている率が高いこと(生活習慣病、精神疾患)や小汚いおじさんに見える人が実はかなり稼いでいる事など業界 の知見が増えたのは人生の経験という観点からもすごく勉強になりました。</p>
<h3>悪かったこと</h3>
<p>悪いことを上げればキリがないのですが、特に印象深かったものを紹介します。</p>
<ol>
<li>先輩社員に意識を高く持っている人がいない（自社の先輩）</li>
<li>商流が深すぎて末端の作業</li>
<li>三次受けだが二次受けとして入場</li>
</ol>
<p>特に1番の意識の高い人がいなかったという事は <strong>エンジニアとして終わっている </strong>と思います。</p>
<p>当時の僕もそうですが、経験のない人はその現場が IT業界 の全てだと思ってしまいます。</p>
<p>そのためそれがデフォルトとなってしまうため、害悪以外の何物でもありません。（当時は分からなかったのですが、今となってははっきり言えます）</p>
<p>技術力が低くても高い志は持つべきというのが僕の信念です。</p>
<h3>SES をやめようと思った理由</h3>
<p>未経験からIT業界を目指した理由である「システムを作ってみたい」という目標にたどり着くのに時間がかかってしまうと考えたため、転職しました。</p>
<p>未経験から拾ってもらったこの会社には恩しかないのですが、なんのために頑張っているかを考えた結果、次のステップに行く決意をしました。</p>
<p>今となっては当時の決断と行動は良かったと思っています。</p>
<h2>受託会社時代</h2>
<h3>入社した経緯</h3>
<p>当時は<span class="sc_marker blue"><strong>とにかく開発がしたい</strong></span>という気持ちがかなり強く、プログラムを書けるお仕事に就く事を目的に仕事を探していました。</p>
<p>当時のスキルセットというか僕の経歴上、なかなか僕自身が目指していた仕事に就くことは難しい状況でした。<br />
その当時のスキルセットは以下になります。（未経験の実務経験1年に仕事があるはずがない</p>
<table style="border-collapse: collapse; width: 100%;">
<tbody>
<tr>
<td style="width: 41.7838%; background-color: #aee3f5;">実務経験</td>
<td style="width: 58.2162%;">1年</td>
</tr>
<tr>
<td style="width: 41.7838%; background-color: #aee3f5;">スキルセット</td>
<td style="width: 58.2162%;">
<ul>
<li>PHP 1年（独学）</li>
<li>MySQL 1年（独学）</li>
<li>PL/SQL 1年</li>
<li>Oracle 1年</li>
<li>Java 6ヶ月</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>またスキルセットが薄い上に経歴もかなり汚れていたため、ハードルはかなり高い状況です。笑</p>
<p><strong>これ以上経歴を汚さない</strong> + <strong>目標にしていた業務内容（開発業務）</strong>の両方を達成するためには普通のやり方だと絶対上手くいかない事が目に見えていたので、<span class="sc_marker blue"><strong>派遣としてやっていこう</strong></span>と作戦を練りました。</p>
<p>派遣なら現場を転々としても履歴書には「202x年 x月 〇〇 入社」という形で書くことになるので、経歴が汚くなることを防ぐ事ができます。</p>
<p>また、開発業務に携わるのが難しいと判断したら次の現場に向かうのも正社員と比較して容易です。</p>
<div class="sc_frame_wrap inline blue">
<div class="sc_frame_title">スキル無いやつには派遣は結構おすすめ</div>
<div class="sc_frame shadow">
<p><span class="sc_marker blue"><strong>実力がない人に限ってはフリーランスやSESより派遣は結構強くおすすめします。</strong></span></p>
<ul>
<li>環境が悪い現場から逃げ出しやすい（経歴を汚さないで済む）</li>
<li>運とタイミング次第では自分が求めている環境に飛び込める</li>
<li>契約満了時は失業保険すぐ受け取れる（会社都合で申請できるため）</li>
</ul>
<p>ちゃんとデメリットは存在しますが、メリットのほうが大きいと思いますよーん</p>
</div>
</div>
<p>上記の考えから以下の派遣会社に登録し、いくつかの面談を受けました。</p>
<p>作戦はズバリ的中し、受託開発を行っている企業にプログラマーとして派遣されることが決まりました。<br />
この受託開発企業では3ヶ月の派遣期間が終了と同時に派遣元から引き抜きという形で正社員として入社させてくれたので何だかんだ運がよかったかもしれません。（かなりブラックでしたが笑）</p>
<h3>良かったこと</h3>
<p>本当に信じられないくらいの様々な経験をすることができました。</p>
<ul>
<li>顧客との打ち合わせ</li>
<li>要件定義</li>
<li>インフラ構築</li>
<li>開発</li>
<li>テスト</li>
<li>運用</li>
</ul>
<p>経験のない人間に上記のフェーズ全てを任せるのは企業としてはどうかと思うのですが、僕個人にはメリットしかない期間でした。</p>
<p>この企業で大きな学びとなったのは以下2点です。</p>
<ol>
<li><span class="sc_marker blue"><strong>各フェーズにおける苦労</strong></span></li>
<li><span class="sc_marker blue"><strong>セキュリティ</strong></span></li>
<li><span class="sc_marker blue"><strong>システムはお金を稼ぐ手段でしかない</strong></span></li>
</ol>
<p>特に3のシステムはお金を稼ぐ手段でしかないはという考えは<strong>一生の宝物</strong>だと考えています。</p>
<p>顧客にとって必要なものは最新の技術を使ったシステムやおしゃれなUIで仕上げられた中身のないシステムではなく<span class="sc_marker blue"><strong>今、目の前にある課題を解決するシステムが必要</strong></span>であるということです。</p>
<p>この点をあまり理解していないエンジニアは肌感として多いと感じています。</p>
<p>「誰のため」や「何のため」を意識していかないと自己満で業務をこなすエンジニアになってしまうので皆さんもご注意を。笑</p>
<h3>悪かったこと</h3>
<p>とにかく色々な案件を掛け持っていたので労働時間がかなり長かったです。（詳細は以下の記事を。笑）</p>
<p>[getpost id=&#8221;1204&#8243; target=&#8221;_blank&#8221; cat_name=&#8221;1&#8243; date=&#8221;1&#8243;]</p>
<p>労働時間の問題さえなければ勉強になる状態ではあったので続けたかったのが本音になります。</p>
<p>たくさん勉強できたので個人的には満足な期間でした。</p>
<h2>自社開発時代</h2>
<h3>入社した経緯</h3>
<p>受託企業では短期間で様々な経験をすることができたのですが、<span class="sc_marker blue"><strong>基礎をすっ飛ばして目の前の案件を納期までに何とか動く状態にする事を目的に開発業務を行っていました。</strong></span></p>
<p>簡単に言うと「<span class="sc_marker blue"><strong>保守性</strong></span>」「<span class="sc_marker blue"><strong>拡張性</strong></span>」「<span class="sc_marker blue"><strong>セキュリティ強度</strong></span>」が低い状態のシステムを作っていました。</p>
<p>エンジニアとしての能力値がかなり低い状態でしたので、次の現場では<span class="sc_marker blue"><strong>ちゃんとしたシステム開発を行っている企業に入社することを目標</strong></span>に転職活動を行いました。</p>
<p>ここでいうちゃんとしたシステム開発というのは以下のことを指します。</p>
<ul>
<li>セキュリティ意識が強いか</li>
<li>会社内でエンジニアの人権はあるか<br />
→人権ないと環境が整わないのでいい加減なシステム開発になりがち</li>
<li>強強エンジニアは在籍しているか<br />
→知見を元に良いシステムが何なのかを考えてくれるセーフティーライン</li>
</ul>
<p>&nbsp;</p>
<p>転職活動時は受託と自社に絞って求人を探していました。</p>
<p><strong>Green</strong> と <a href="https://px.a8.net/svt/ejp?a8mat=3HBU7V+NTDQY+2OTA+HY06A" rel="nofollow"><strong>転職ドラフト</strong></a>, <a href="https://px.a8.net/svt/ejp?a8mat=3N5XSA+1CTL5M+3SWM+HVFKY" rel="nofollow"><strong>TechClips ME（テックミー）</strong></a><img decoding="async" border="0" width="1" height="1" src="https://www16.a8.net/0.gif?a8mat=3N5XSA+1CTL5M+3SWM+HVFKY" alt="" />を使って本当にたくさんの求人を精査しました。</p>
<ul>
<li>前回の受託企業のような詰め込み型の令和の時代にそぐわない企業を避けるため。</li>
<li>どちらもエンジニア向けのサービスであり、経歴書を充実させることで企業からのオファーが来るので結構おすすめです。</li>
</ul>
<p>結果的に<a href="https://px.a8.net/svt/ejp?a8mat=3HBU7V+NTDQY+2OTA+HY06A" rel="nofollow">転職ドラフト</a>経由で出会った自社開発企業の面接官が以下の事を言ってくれたので転職することを決めました。</p>
<ul>
<li>君はまだまだ技術力が低い</li>
<li>まだまだ知るべき事はたくさんある</li>
<li>私達の会社で勉強しながら成長しないかい？</li>
</ul>
<h3>良かったこと</h3>
<p>いいものを作るというマインドが高い人に出会えた事が何よりも得難いものでした。</p>
<p>いいものを作るというマインドは過程の中では<strong>正しいプログラムの書き方</strong>や<strong>システムとしてあるべき姿</strong>を目指すことになるので、<strong>確かな技術力の向上</strong>が感じられました。<br />
（これが当たり前と言われればそうですが…</p>
<p>&nbsp;</p>
<p>また技術力の向上と合わせて<strong>組織の作り方</strong> も勉強になっています。</p>
<p>企業自体の従業員数は2000名ほどの人数を抱えているのですが、開発部は20名弱の組織体系です。</p>
<p>そのため正にこれからの組織という感じで、本当に価値のあるものを届けるために色々なアプローチを試しています。<br />
優秀な先輩たちが「<span class="sc_marker blue"><strong>これを達成したい</strong></span>」と目標を定めて取り組む姿は、過程も含めて勉強になっています。（エンジニアである前に人間ですからね。笑）</p>
<p>&nbsp;</p>
<h3>悪かったこと</h3>
<p>実際のところ、自社サービスを展開しているのですが毎月赤字という状況です。</p>
<p>どうにかこの状況を打開するために営業と開発が肩を組みながら頑張っている状況ですが、赤字という状況は肩身を狭くします。</p>
<p>現在、各数値が改善してきているので近いうちに黒字になってくれるはずでしょう。（希望的観測！）</p>
<p>&nbsp;</p>
<h2>所属会社の形態によって変わること</h2>
<table style="border-collapse: collapse; width: 100%; height: 145px;">
<tbody>
<tr style="background-color: #6fa4ed;">
<td style="width: 10.9003%; height: 45px;"></td>
<td style="width: 26.0788%; height: 45px;"><span style="color: #ffffff;">特徴</span></td>
<td style="width: 31.5104%; height: 45px;"><span style="color: #ffffff;">エンジニアスキル</span></td>
<td style="width: 31.5104%; height: 45px;"><span style="color: #ffffff;">ビジネススキル</span></td>
</tr>
<tr style="height: 10px;">
<td style="width: 10.9003%; height: 10px;">SES</td>
<td style="width: 26.0788%; height: 10px;">契約切られなければ何しても</td>
<td style="width: 31.5104%; height: 10px;">☆</td>
<td style="width: 31.5104%; height: 10px;">☆</td>
</tr>
<tr style="height: 45px;">
<td style="width: 10.9003%; height: 45px;">受託</td>
<td style="width: 26.0788%; height: 45px;">納期と太客が絶対</td>
<td style="width: 31.5104%; height: 45px;">☆☆</td>
<td style="width: 31.5104%; height: 45px;">☆☆☆</td>
</tr>
<tr style="height: 45px;">
<td style="width: 10.9003%; height: 45px;">自社</td>
<td style="width: 26.0788%; height: 45px;">いいものを作る</td>
<td style="width: 31.5104%; height: 45px;">☆☆☆</td>
<td style="width: 31.5104%; height: 45px;">☆☆</td>
</tr>
</tbody>
</table>
<h3>SES を悪く言うつもりはない</h3>
<p>上記の表で SES の評価が高くないのは、僕が所属していた SES企業 があまり良くないところだったからです。</p>
<p>友達が所属している SES 企業の話を聞く限り、結構条件は整っているなぁという印象があります。</p>
<ul>
<li>自社プレゼン会（自分で作ってきたものがプロダクトになる可能性）</li>
<li>案件選択性</li>
<li>以外にも平均勤続年数が高い</li>
</ul>
<p>本当にピンキリです。</p>
<p>&nbsp;</p>
<h3>エンジニアスキル</h3>
<p>エンジニアスキルは圧倒的に自社サービスが身につきます。</p>
<p>自社サービスに入社してよかったことにも記載したのですが、<span class="sc_marker blue"><strong>いいものを作るというマインドはかなり大きい</strong></span>です。</p>
<p>いいものを作ったところで売上が上がるとは限らないのですが、自分たちのサービスで下手なものを作るという事は絶対にしてはいけないことです。（わざわざ負債を抱える必要はない）</p>
<p>いいものを作るためには技術力が必要ですから、圧倒的に自社サービスが完勝です。</p>
<p>&nbsp;</p>
<h3>ビジネススキル</h3>
<p>ビジネススキルは圧倒的に受託開発が身につきます。</p>
<p>理由は<span class="sc_marker blue"><strong>お客様は神様という構図が成り立つ</strong></span>からですあり、<span class="sc_marker blue"><strong>お客さんとの調整をミスれば炎上してしまうという恐ろしい現実</strong></span>が待っているからです。</p>
<p>受託金額が高ければ高いほど無茶な要求をしてくるというのが肌感覚としてあったり、納期もなんやかんやで短く設定してきたりします。</p>
<p>また、ギスギスした社内であれば社内調整も必要のため、エンジニア業務以外の時間でかなりの労力が必要です。</p>
<p>顧客調整と社内調整の両方の観点からビジネススキルは受託企業の完勝です。</p>
<p>&nbsp;</p>
<h2>所属会社の形態によって変わらないこと</h2>
<p>エンジニアである限り不変なことです。</p>
<p><span class="sc_marker-animation y"><strong>技術力があり、所属先で価値を出せていること</strong></span></p>
<p>上記が達成できている人は<span class="sc_marker blue">どの現場に行こうがどの形態で働こうが最強のエンジニア</span>です。</p>
<h2>所属会社の形態に関わらず大切にしないといけないこと</h2>
<p>会社の形態によって特徴が違うのですが、学ぶべき点はどの形態の会社に行っても必ずあります。</p>
<p>そのため、1エンジニアとして最大限学ぶためには<span class="sc_marker blue"><strong>プロジェクトの中心にいることが大切</strong></span>になってきます。</p>
<ul>
<li>テックリード</li>
<li>スクラムマスター</li>
<li>上流担当</li>
</ul>
<p>「自社サービスで末端の作業員をやっています！」という人よりも「SES で俺がプロジェクト回しているぜ」っていう人の方が圧倒的に市場価値は高いです。</p>
<p>どの形態で働こうがこの考えは大切にするべきです。</p>
<p>&nbsp;</p>
<h2>最後に</h2>
<p>どの形態の会社で働くにせよ、自身の技術力を向上させ、プロジェクトで中心的な役割を果たすことを大事にしてください。</p>
<p>自分自身が何を考え、何を大事にするかで選択は変わってくると思います。</p>
<p>経験を通して学び、スキルを向上させ、満足の行くキャリアを歩めるように祈っています。お互いに頑張りましょう。</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1392/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【クリーンアキテクチャ】SOLID原則の依存性反転の原則を学ぶ</title>
		<link>https://otonan-syusyoku.work/archives/1360</link>
					<comments>https://otonan-syusyoku.work/archives/1360#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Mon, 05 Jun 2023 15:19:41 +0000</pubDate>
				<category><![CDATA[生涯独学]]></category>
		<category><![CDATA[目指せ上流]]></category>
		<category><![CDATA[実務]]></category>
		<category><![CDATA[脱3流プログラマー]]></category>
		<category><![CDATA[設計]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1360</guid>

					<description><![CDATA[SOLID原則を学んでいます 「Software Design (ソフトウェアデザイン) 2023年6月号 [雑誌]」という雑誌に出会ったので、SOLID原則を学習中です。これを機に3流プログラマーに慣れたらいいなぁと。 [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>SOLID原則を学んでいます</h2>
<p>「<a href="//af.moshimo.com/af/c/click?a_id=2019667&amp;p_id=170&amp;pc_id=185&amp;pl_id=4062&amp;url=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2FB0C4K9X2XV" rel="nofollow" referrerpolicy="no-referrer-when-downgrade">Software Design (ソフトウェアデザイン) 2023年6月号 [雑誌]</a>」という雑誌に出会ったので、SOLID原則を学習中です。これを機に3流プログラマーに慣れたらいいなぁと。</p>
<p>前回の学習内容はこちら</p>
<p>[getpost id=&#8221;1332&#8243; cat_name=&#8221;1&#8243; date=&#8221;0&#8243;]</p>
<p>&nbsp;</p>
<h2>まずはInterfaceから</h2>
<p>PHPにおけるInterface（インターフェース）は、クラスが実装するべきメソッドのシグネチャ（メソッド名、引数、戻り値の型）を定義するための機能です。</p>
<p>Interfaceは抽象的なクラスであり、実際の実装を持ちません。<br />
(じゃあいらんやん&#8230;って思っちゃいますよね)</p>
<p>&nbsp;</p>
<p>なぜ必要なのかというと、<br />
<strong>クラスはInterfaceを実装することで、そのInterfaceで定義されたメソッドを必ず実装しなければならないからです。</strong></p>
<p>例えば、ユーザーにメッセージを送信する場面を考えて下さい。</p>
<p>どの様なメッセンジャーを使うにしても必ず「<strong>メッセージを生成する機能</strong>」と「<strong>メッセージを送信する機能</strong>」の2つが必要になるはずです。</p>
<p>ここではメールで送信する場合(メールクラス)とLineで送信する場合(Lineクラス)を想定してみます。</p>
<p>interfaceを以下のように定義することで、実装したクラスは<strong>interfaceの内容を必ず実装しなければいけません。</strong></p>
<pre class="line-numbers"><code class="language-php">interface Message {
    public function createMesseage();
    public function sendMessage();
}</code></pre>
<p>上記の様に定義することで、メールクラスとLineクラスは必ず同じメソッドがある事が担保されます。(<strong>クラスは同じ振る舞いを持つことが保証されます</strong>)</p>
<p>仮にSlackでメッセージを送信したい場合、Slackクラスに同じメソッドを実装するだけで済むため拡張性が高くなりますよね。あら、わかりやすい。笑<br />
(既存のクラス(メールクラス、Lineクラス)に影響なく実装できる)</p>
<pre class="line-numbers"><code class="language-php">class Mail implements Message {
    public function createMessage() {
        //処理    
    }

    public function sendMessage() {
        //処理   
    }
}

class Line implements Message {
    public function createMessage() {
        //処理    
    }

    public function sendMessage() {
        //処理   
    }
}

interface Message {
    public function createMessage() {}
    public function sendMessage() {}
}</code></pre>
<h2>いよいよ依存性反転の原則</h2>
<p>一旦、呼び出し元の観点を持ってみましょう。</p>
<p>interfaceを実装することで、呼び出し元のコードはinterfaceに対して依存し、具体的な実装クラスに対して依存しないためコードの結合が低くなります(疎結合。。。)</p>
<p><img decoding="async" src="https://otonan-syusyoku.work/wp-content/uploads/2023/06/呼び出し元-300x150.png" alt="依存性反転の原則" width="300" height="150" class="aligncenter wp-image-1363 size-medium" srcset="https://otonan-syusyoku.work/wp-content/uploads/2023/06/呼び出し元-300x150.png 300w, https://otonan-syusyoku.work/wp-content/uploads/2023/06/呼び出し元-768x384.png 768w, https://otonan-syusyoku.work/wp-content/uploads/2023/06/呼び出し元.png 1000w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>先程のコードで考えると呼び出し元はメールクラスを呼び出しているつもりでもinterfaceを経由しているのが実態です。</p>
<p>Interfaceを使用することで、クラス間の依存関係を抽象化し、実装にではなくインターフェースに依存するようにすることができます。</p>
<ul>
<li>呼び出し元の見ているところがinterfaceになる</li>
<li>interfaceは定義する場所</li>
<li>interfaceを継承したクラスは必ず同じメソッドある</li>
<li>結果、呼び出し元と実装クラスはinterfaceに依存している</li>
</ul>
<p>これにより、依存性反転原則が達成されます。</p>
<p>&nbsp;</p>
<p>ちゃんちゃん。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1360/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>おいらのためだけの絶望開発日誌　5/20〜</title>
		<link>https://otonan-syusyoku.work/archives/1320</link>
					<comments>https://otonan-syusyoku.work/archives/1320#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Sat, 27 May 2023 02:50:39 +0000</pubDate>
				<category><![CDATA[生涯独学]]></category>
		<category><![CDATA[ポエム]]></category>
		<category><![CDATA[実務]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1320</guid>

					<description><![CDATA[精神面 タスクの早めの提出 割り振られたタスクに対して、早めに提出しレビューを依頼することを心がけることが出来た。 私は割り振られたタスクに対して時間をかけすぎてしまう節があるので、とりあえず動くものを作って早めにレビュ [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>精神面</h2>
<h3>タスクの早めの提出</h3>
<p>割り振られたタスクに対して、早めに提出しレビューを依頼することを心がけることが出来た。</p>
<p>私は割り振られたタスクに対して時間をかけすぎてしまう節があるので、とりあえず動くものを作って早めにレビューを貰うことを狙っての行動です。</p>
<p>レビュワーの時間を奪ってしまうのではないかという考えもあったのですが、一人で抱えてしまうよりも他の人の意見を頂いて次のタスクに取り掛かる方がチーム全体への貢献ができるのではないかと思っています。</p>
<p>チームの方から怒られる前に一人前のものを納品できるよう早めに成長したいところですね。</p>
<h3>新人さん</h3>
<p>基本的に私の所属チームの方はリモートの際にミーティング以外の時間に雑談をする文化がないです。（前の現場ではちょっとした雑談をする文化があっただけなので、一般的な話は知りません。）</p>
<p>僕も参画して1ヶ月ほどですが、疎外感を感じる時が多々あります。</p>
<p>そういう思いがあったので、リモート時には5分程度ではありますが、ビデオ通話を用いて顔を合わせちょっとした安心をお互いに持てるよう心がけています。</p>
<p>業務に影響が出ない範囲で続けていければいいなと。</p>
<h2>技術面</h2>
<h3>truthy/falsy</h3>
<p>厳格な真偽値を学ぶことになる。</p>
<p>これまではプログラムが「1」と「True」は正として扱うと考えていた。</p>
<p>そんな中で以下のコードが通らず驚いた。</p>
<pre class="line-numbers"><code class="language-php">$nonStrictBool = 1; //実際にはpreg_match()の戻り値
assertTrue($nonStrictBool);

//false</code></pre>
<p>※最終的には(bool)$nonStrictBoolという形で判定を行うことで対処。</p>
<p>&nbsp;</p>
<p>これまでPHPを扱っていく中で、このデータがの破損があった場合にシステムに大きな侵害が出るという予想がたった時だけ厳格な判定を行ってきた。</p>
<p>そもそもの話、全て厳格に扱えばいいだけの話なのでこれからは厳格に扱っていこうと思う。</p>
<p><a href="https://www.php.net/manual/ja/types.comparisons.php">PHP 型の比較表 ¶</a></p>
<p>&nbsp;</p>
<h3>array系関数を学ぶ</h3>
<p>これまでの人生、配列をforeachで回して加工処理を実行していました。</p>
<p>残念ながらPHPには便利な関数が充実しており、簡単に処理できることを知ってしまった。</p>
<p>[getpost id=&#8221;1312&#8243; cat_name=&#8221;1&#8243; date=&#8221;0&#8243;]</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1320/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>リーダブルコードを読んで実践したいこと</title>
		<link>https://otonan-syusyoku.work/archives/1143</link>
					<comments>https://otonan-syusyoku.work/archives/1143#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Mon, 27 Feb 2023 15:47:35 +0000</pubDate>
				<category><![CDATA[生涯独学]]></category>
		<category><![CDATA[絶対に必要なIT基礎知識]]></category>
		<category><![CDATA[コーディング]]></category>
		<category><![CDATA[リーダブルコード]]></category>
		<category><![CDATA[実務]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1143</guid>

					<description><![CDATA[結論 先に結論なんですけど、リーダブルコードは当たり前の事が書いてあります。 ただその当たり前の事が出来ていないと感じたのですぐに実践できることを備忘録として残したいと思います。 プログラマーとして forのネスト ルー [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>結論</h2>
<p>先に結論なんですけど、<span class="sc_marker blue"><strong>リーダブルコードは当たり前の事が書いてあります。</strong></span></p>
<p>ただその当たり前の事が出来ていないと感じたのですぐに実践できることを備忘録として残したいと思います。</p>
<h2>プログラマーとして</h2>
<h3>forのネスト</h3>
<p>ループがネストしている場合はインデックスを分かりやすく定義してあげる。</p>
<p>以下のコードではループする変数の接頭辞をインデックスの接頭辞に着けることで、インデックスの使用を楽に出来る！！<br />
※めちゃくちゃ便利！わかりやすい！<br />
※ループをネストしないコードをかければ一番良いかもねぇ</p>
<pre class="line-numbers"><code class="language-php">$users = array(
    //複数要素
);

$entry_point = array(
    //複数要素
);

for($u_i=0;$i&lt;count($users);$u_i&lt;$users){
    for($e_i=0;$e_i&lt;count($entry_point);$e_i&lt;$entry_point){
        //処理
    }
}</code></pre>
<p>&nbsp;</p>
<h3>視覚的に優しく</h3>
<h4>縦に並べる</h4>
<pre class="line-numbers"><code class="language-php">DB::table('ex_stores')-&gt;insert([
            [
                'store_id' 　　　　　　　　　　　　=&gt; '123456',
                'logo_path' 　　　　　　　　　　=&gt; 'demo_cafe.png',
                'big_category' 　　　　=&gt; '食べ物',
                'small_category' =&gt; 'カフェ',
                'tag1' 　　　　　　　　　　　　　　　　　　　　=&gt; 'ゆったり',
                'tag2' 　　　　　　　　　　　　　　　　　　　　=&gt; 'まったり',
                'tag3' 　　　　　　　　　　　　　　　　　　　　=&gt; '潮風に揺られながら',
                'top_url' 　　　　　　　　　　　　　　=&gt; 'main',
            ]
]);</code></pre>
<p>&nbsp;</p>
<h3>コメント</h3>
<h4>コードに指摘を入れる場合</h4>
<p>自分が書いたにしろ他人が書いたにしろ、何かを感じた場合は下記のようにコメント残したいです。</p>
<p>特にGitのコメントに使えそう。</p>
<table style="border-collapse: collapse; width: 100%; height: 292px;">
<tbody>
<tr style="background-color: #f5dcdc;">
<td style="width: 33.3333%; height: 45px;"><strong>コメント接頭辞</strong></td>
<td style="width: 33.3333%; height: 45px;"><strong>内容</strong></td>
<td style="width: 33.3333%; height: 45px;"><strong>備考</strong></td>
</tr>
<tr style="height: 45px;">
<td style="width: 33.3333%; height: 45px;">TODO:</td>
<td style="width: 33.3333%; height: 45px;">やるべきこと。後で手を付ける。</td>
<td style="width: 33.3333%; height: 45px;">複数案件抱えている時などにかなり役立ちそう</td>
</tr>
<tr style="height: 45px;">
<td style="width: 33.3333%; height: 45px;">FIX:</td>
<td style="width: 33.3333%; height: 45px;">既知の不具合があるコード。</td>
<td style="width: 33.3333%; height: 45px;">修正するべき内容</td>
</tr>
<tr style="height: 54px;">
<td style="width: 33.3333%; height: 54px;">HACK:</td>
<td style="width: 33.3333%; height: 54px;">あまりきれいじゃない解決策。</td>
<td style="width: 33.3333%; height: 54px;">「改修の余地あるよー」を伝える時？</td>
</tr>
<tr style="height: 103px;">
<td style="width: 33.3333%; height: 103px;">DANGER:</p>
<p>IMPORTANT:</td>
<td style="width: 33.3333%; height: 103px;">危険</td>
<td style="width: 33.3333%; height: 103px;">リーダブルコードには「XXX：」と記載されているが、自分なりに改変。</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>コメントの基本原則として以下を抑えておきたい。</p>
<h4>クラスやメソッドはひと目で分かるように</h4>
<p>クラスやメソッド内での処理がすぐに理解できるように、処理内容をコメントする。</p>
<p>パターンとしては以下がある。</p>
<ul>
<li>実例をコメント
<ul>
<li style="list-style-type: none;">
<ul>
<li>XXXを○○○して△△△という形式に変更</li>
</ul>
</li>
</ul>
</li>
<li>処理をブロックごとに分けてコメントする
<ul>
<li style="list-style-type: none;">
<ul>
<li>大きいメソッドなどは適切なタイミングでコメント</li>
</ul>
</li>
</ul>
</li>
</ul>
<h4>問題になりそうな箇所は先に明示する</h4>
<p><span class="sc_marker blue"><strong>※かなり大事な気がするので例を書きます。</strong></span></p>
<p>仮にインサート関数とデリート関数を定義してインサート関数の前にデリート関数を実行させる処理を行いたいとする。</p>
<pre class="line-numbers"><code class="language-php">class DB{
public function insert($data){
DB::delete();   
}

public function delete(){

}

}</code></pre>
<p>&nbsp;</p>
<p>インサート関数の中でデリート関数を呼び出しているのですが、仮にデリート関数で複雑な処理を行っており処理自体が10秒かかるとしたらインサート処理自体が10秒以上かかってしまうことになります。</p>
<p>上記の場合、詳細を知らないメンバーがデリート関数を呼び出してしまうと想定外の結果となってしまう危険性があるため、以下のようなコメントを残す必要があります。</p>
<pre class="line-numbers"><code class="language-php">class DB{
public function insert($data){
DB::delete();   
}

//注意：実行時間10秒以上
public function delete(){

}

}</code></pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1143/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【PHPエンジニア】WEB系受託企業で月300時間稼働を10ヶ月続けた感想</title>
		<link>https://otonan-syusyoku.work/archives/1204</link>
					<comments>https://otonan-syusyoku.work/archives/1204#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Fri, 17 Feb 2023 02:30:46 +0000</pubDate>
				<category><![CDATA[仕事の独り言]]></category>
		<category><![CDATA[業務]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ポエム]]></category>
		<category><![CDATA[実務]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1204</guid>

					<description><![CDATA[昨今、「自由に働ける」「高収入」といった話題が上がりやすいIT業界なのですが、WEB系受託企業で300時間/月稼働した感想を書きたいと思います。 &#160; この記事はジュニアエンジニアやミドルエンジニアを想定している [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>昨今、「自由に働ける」「高収入」といった話題が上がりやすいIT業界なのですが、WEB系受託企業で300時間/月稼働した感想を書きたいと思います。</p>
<p>&nbsp;</p>
<p>この記事はジュニアエンジニアやミドルエンジニアを想定している記事です。</p>
<p>同じ様な働き方やIT業界の働きづらさに怯えている方の参考になれば幸いです。</p>
<h2>前提</h2>
<p>所属先の簡単な概要です。</p>
<p>厳しい社内リソースと案件数だったため、高稼働の状態でした。</p>
<p>またタイトルで受託企業と謳っているのですが、元々は紙を扱った業種の会社だった為、古い体制が残り続けている会社となっています。<br />
そのため、システムを構築する期間を度外視した案件のとり方をしてきた結果が悲惨な状態を作り上げていきました。</p>
<table style="border-collapse: collapse; width: 100%;">
<tbody>
<tr>
<td style="width: 27.6786%;">種別</td>
<td style="width: 72.3214%;">受託</td>
</tr>
<tr>
<td style="width: 27.6786%;">チームメンバー</td>
<td style="width: 72.3214%;">7ヶ月間は2人。最後の3ヶ月は4人。</td>
</tr>
<tr>
<td style="width: 27.6786%;">案件数</td>
<td style="width: 72.3214%;">12</td>
</tr>
<tr>
<td style="width: 27.6786%;">案件概要</td>
<td style="width: 72.3214%;">
<ul>
<li>予約システム</li>
<li>申請システム</li>
<li>営業管理システム</li>
<li>加入者情報閲覧システム</li>
</ul>
<p>&#8230;etc</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<h2>なぜ300時間を耐えたのか</h2>
<p>結果的に退職することになったのですが、まずは何故300時間の働き方を耐えてきたのかをお伝えしたいと思います。</p>
<p>&nbsp;</p>
<p>一般的に「1日8時間×月20日+残業(5〜20h)=180〜200h」の働き方が普通だと思います。</p>
<p>そんな普通の働き方と比較して過酷な300時間の働き方を10ヶ月間も耐えたかというと自分の技術を伸ばしたいという目標があったからです。</p>
<p>&nbsp;</p>
<p>前職はエンジニアの人手不足、社内の技術ストックもない状態でしたので<span class="sc_marker blue">自分自身で目の前の案件を乗り切るしか</span>方法がありませんでした。</p>
<p>そのような状況下で働き続けたので肉体と精神を削って確かな技術を得ることができました。<br />
前職に入社するまでは、末端作業員レベルだったものが炎上案件を複数こなしたことで、1エンジニアとして市場に出れるレベルになったと思います。</p>
<p>まだまだ足りない技術のほうが圧倒的に多いのですが、エンジニアとして名乗れるラインには立つことができたので目標達成です。</p>
<h2>300時間働いて良かったこと</h2>
<h3>1→10までやらせて貰えた</h3>
<p>要件定義からテストまでの工程を自分が主軸となって経験できたのが何より得難いものでした。</p>
<p>各工程を経験したことによって、<span class="sc_marker blue">どのくらいの期間でどのレベルまで仕上げるのか</span>が少し想像することができるようになりました。<br />
小規模案件が多かったのでまだレベルは低いのですが、工程ごとに躓きやすい部分や作業者の負担について考える良い経験をもらいました。</p>
<p>&nbsp;</p>
<p>また、1→10の中で特に経験できて良かったことを挙げます。</p>
<ul>
<li>要件定義</li>
</ul>
<p style="padding-left: 40px;"><span class="sc_marker blue">本当に必要な機能なのかを含めて顧客が求めているものは何なのか</span>、<span class="sc_marker blue">顧客が求めているものは予算と納期にマッチしているものなのか</span>を考え、話すことができました。<br />
※ITについて知識が浅い顧客も中には存在していたので、技術可否や機能の不必要の判断を見誤ると案件が火を吹きます。(1つの案件で火吹いちゃいました。)</p>
<ul>
<li>設計</li>
</ul>
<p style="padding-left: 40px;">システム設計から始まり、外部設計,内部設計,DB設計などたくさんのことを考慮して、全体設計を考えていきました。<br />
設計って経験が必要ですね。。。</p>
<ul>
<li>技術選定</li>
</ul>
<p style="padding-left: 40px;">何を使ってシステムを構築するのか、ある機能を実装するために必要なパッケージの導入など。</p>
<h3>受託先企業の内部を見ることができた</h3>
<p>エンジニアならゲロを吐きそうになるデータの持ち方をしている企業さんやエンジニアなら何でも叶えてくれるという考え方を持った人に出会いました。</p>
<p>世間ではDXやIT化の推進などが叫ばれていますが、それらを達成するためには時間が必要なことを実感できました。</p>
<h3>技術に対するお金の考え方が身についた</h3>
<p>1エンジニアが個人単位で売れるものは技術ですが、会社単位で見るとお金になっているのは作り上げたシステムがもたらすITによる恩恵です。</p>
<p>受託企業では「複数の言語を書くことができます！」といった技術よりも、ITによる恩恵が重要だと思います。</p>
<p><span class="sc_marker blue">何ができるかよりも何を達成することができるのか。</span></p>
<p>&nbsp;</p>
<p>ただし、エンジニアである以上、技術にこだわる必要は絶対にあるはずです。</p>
<p>お金と技術が必ずしも比例していくわけではないので、ここは引き続き悩み続けていきたいですね。</p>
<h2>300時間働いてダメだったこと</h2>
<h3>体に異変</h3>
<p>特に感じていたのが以下の2つです。</p>
<ul>
<li>体重-7キロ</li>
<li>些細なことでカッとなる</li>
</ul>
<p>300時間働くということは何かを削る必要が出てきます。<br />
自分の場合は「睡眠」と「食事」でした。</p>
<p>フルリモートということもあり<span class="sc_marker blue">1日1食、6時間睡眠がデフォルト</span>となっていました。</p>
<p>&nbsp;</p>
<p>その結果、上記の異変が体に起きてしまいました。</p>
<p>得た経験が多かった反面、体への負担もかなり多かったと思います。笑</p>
<h3>社内を変えることができなかった</h3>
<p>退社する時には僕を含めて4名のチームでした。(先輩エンジニアも300時間)</p>
<p>月300時間働くということは人数に見合わない案件数や納期の短さ、部長がITに精通していないなどが挙げられるのですが、問題となっている原因を変えることができないまま退職することになりました。</p>
<p>解決できなかった問題を社内に残る人たちに押し付ける事は辛いもんですね。。</p>
<h2>最後に伝えたいこと</h2>
<p>目標があり、その目標を達成できる仕事ができるのであれば無茶な働き方をするべきだと思います。<br />
技術がほしい、お金がほしいなど目標がある方であれば多少の無茶をしてでもご自身の目標を掴み取ってほしいものです。</p>
<p>反対に目標がない(楽できれば良い)、目標に沿わない仕事しかできないのであれば、僕のような無茶な働き方はしないで欲しいです。</p>
<p>炎上も悪くないものですが、ご自身で考えて決定して行動していってほしいです。</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1204/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
