<?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>脱3流プログラマー &#8211; エンジニア見習い</title>
	<atom:link href="https://otonan-syusyoku.work/archives/tag/%e8%84%b13%e6%b5%81%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9e%e3%83%bc/feed" rel="self" type="application/rss+xml" />
	<link>https://otonan-syusyoku.work</link>
	<description>三流プログラマー</description>
	<lastBuildDate>Mon, 21 Jul 2025 13:03:38 +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>脱3流プログラマー &#8211; エンジニア見習い</title>
	<link>https://otonan-syusyoku.work</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>iTerm2でディレクトリごとにテーマを自動で切り替える方法</title>
		<link>https://otonan-syusyoku.work/archives/2136</link>
					<comments>https://otonan-syusyoku.work/archives/2136#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Fri, 04 Jul 2025 06:27:12 +0000</pubDate>
				<category><![CDATA[生涯独学]]></category>
		<category><![CDATA[Ite]]></category>
		<category><![CDATA[作業効率化]]></category>
		<category><![CDATA[脱3流プログラマー]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=2136</guid>

					<description><![CDATA[ターミナル作業をしていると、「このプロジェクトの時はこの色で、個人作業の時は別の色にしたいな」と思うことはありませんか？iTerm2を使っているなら、ディレクトリごとにターミナルのテーマ（背景色、フォント、カラースキーム [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>ターミナル作業をしていると、「このプロジェクトの時はこの色で、個人作業の時は別の色にしたいな」と思うことはありませんか？iTerm2を使っているなら、<b>ディレクトリごとにターミナルのテーマ（背景色、フォント、カラースキームなど）を自動で切り替える</b>ことができます！副業を多数行っている人は設定必須っす！</p>
<p>今回は、ZshとiTerm2の連携機能を使って、この便利機能を設定する方法を解説します。</p>
<h3>なぜディレクトリごとにテーマを切り替えるのか？</h3>
<ul>
<li><b>視覚的な区別</b>: 複数のプロジェクトを並行して進めている場合、ターミナルの色が変わることで、今どの環境で作業しているのか一目で分かります。</li>
<li><b>集中力の向上</b>: 特定の作業モードに合わせた色合いにすることで、集中力を高める効果も期待できます。</li>
<li><b>誤操作の防止</b>: 本番環境や重要なディレクトリに入ったときに、警告色にすることで、不用意なコマンド実行を防ぐことができます。</li>
</ul>
<h3>必要なもの</h3>
<ul>
<li><b>iTerm2</b>: macOS用の高機能ターミナルエミュレータ</li>
<li><b>Zsh</b>: macOSのデフォルトシェル（Bashでも可能ですが、Zshの方が設定が簡単です）</li>
</ul>
<h3>設定手順</h3>
<p>設定は大きく分けて2つのステップです。</p>
<ol start="1">
<li><b>iTerm2で複数のプロファイル（テーマ）を作成する</b></li>
<li><b>Zshの設定ファイルで、ディレクトリに応じたプロファイル切り替えスクリプトを記述する</b></li>
</ol>
<h4>ステップ1: iTerm2で複数のプロファイル（テーマ）を作成する</h4>
<p>まず、切り替えたいテーマごとにiTerm2のプロファイルを作成します。</p>
<ol start="1">
<li><b>iTerm2を開き、<code>Cmd + ,</code> で設定（Preferences）を開きます。</b></li>
<li><b>「Profiles」タブを選択します。</b></li>
<li><b>左下の「+」ボタンをクリックして、新しいプロファイルを作成します。</b>
<ul>
<li>例えば、デフォルトの「Default」プロファイルとは別に、仕事用の「<b>Work Theme</b>」、個人用の「<b>Personal Theme</b>」など、分かりやすい名前を付けましょう。</li>
</ul>
</li>
<li><b>各プロファイルでテーマを設定します。</b>
<ul>
<li>作成したプロファイルを選択し、右側の設定を変更します。</li>
<li><b>Colors</b>: 「Color Presets」から好きなカラースキームを選んだり、背景色を調整したりできます。</li>
<li><b>Text</b>: フォントや文字サイズを設定します。</li>
<li><b>Window</b>: 背景画像や透明度を設定することも可能です。</li>
</ul>
</li>
</ol>
<p>これで、複数のテーマがiTerm2に準備できました。</p>
<h4>ステップ2: Zshの設定ファイルで、ディレクトリに応じたプロファイル切り替えスクリプトを記述する</h4>
<p>次に、シェルがディレクトリを移動するたびに、iTerm2に「このプロファイルに切り替えて！」と指示を出すスクリプトを記述します。</p>
<p>お使いのZshの設定ファイル（通常は <code>~/.zshrc</code>）を開いて、以下のコードを追記してください。</p>
<p><response-element class="" ng-version="0.0.0-PLACEHOLDER"><code-block _nghost-ng-c3844426358="" class="ng-tns-c3844426358-687 ng-star-inserted"></code-block></response-element></p>
<div _ngcontent-ng-c3844426358="" class="code-block ng-tns-c3844426358-687 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" jslog="223238;track:impression;BardVeMetadataKey:[[&quot;r_7236cad7b46e0bc8&quot;,&quot;c_d615f67ec21b33fe&quot;,null,&quot;rc_9a72fd6ecd384a95&quot;,null,null,&quot;ja&quot;,null,1,null,null,1,0]]">
<div _ngcontent-ng-c3844426358="" class="formatted-code-block-internal-container ng-tns-c3844426358-687">
<div _ngcontent-ng-c3844426358="" class="animated-opacity ng-tns-c3844426358-687">
<pre _ngcontent-ng-c3844426358="" class="ng-tns-c3844426358-687"><code _ngcontent-ng-c3844426358="" role="text" data-test-id="code-content" class="code-container formatted ng-tns-c3844426358-687"><span class="hljs-comment"># iTerm2のプロファイルを切り替える関数</span>
<span class="hljs-comment"># この関数は、iTerm2独自の制御シーケンス（OSC 1337;SetProfile）を使ってプロファイルを変更します。</span>
<span class="hljs-keyword">function</span> <span class="hljs-function"><span class="hljs-title">iterm_set_profile</span></span>() {
  <span class="hljs-built_in">local</span> profile_name=<span class="hljs-string">"<span class="hljs-variable">$1</span>"</span>
  <span class="hljs-built_in">echo</span> -e <span class="hljs-string">"\033]1337;SetProfile=<span class="hljs-variable">${profile_name}</span>\a"</span>
}

<span class="hljs-comment"># コマンド実行前に呼ばれる関数</span>
<span class="hljs-comment"># ここで現在のディレクトリ($PWD)をチェックし、適切なプロファイルを呼び出します。</span>
<span class="hljs-keyword">function</span> <span class="hljs-function"><span class="hljs-title">precmd_iterm_profile_switcher</span></span>() {
  <span class="hljs-keyword">if</span> [[ <span class="hljs-string">"<span class="hljs-variable">$PWD</span>"</span> == *<span class="hljs-string">"/Users/yourname/projects/work"</span>* ]]; <span class="hljs-keyword">then</span>
    <span class="hljs-comment"># 例: '/Users/yourname/projects/work' ディレクトリ配下なら 'Work Theme' プロファイルに</span>
    iterm_set_profile <span class="hljs-string">"Work Theme"</span>
  <span class="hljs-keyword">elif</span> [[ <span class="hljs-string">"<span class="hljs-variable">$PWD</span>"</span> == *<span class="hljs-string">"/Users/yourname/documents/personal"</span>* ]]; <span class="hljs-keyword">then</span>
    <span class="hljs-comment"># 例: '/Users/yourname/documents/personal' ディレクトリ配下なら 'Personal Theme' プロファイルに</span>
    iterm_set_profile <span class="hljs-string">"Personal Theme"</span>
  <span class="hljs-keyword">else</span>
    <span class="hljs-comment"># それ以外のディレクトリでは、デフォルトのプロファイルに戻す</span>
    iterm_set_profile <span class="hljs-string">"Default"</span>
  <span class="hljs-keyword">fi</span>
}

<span class="hljs-comment"># Zshがコマンド実行前にprecmd_iterm_profile_switcher関数を実行するように登録</span>
precmd_functions+=(precmd_iterm_profile_switcher)
</code></pre>
</div>
</div>
</div>
<p>&nbsp;</p>
<p><b>【重要】コードをあなたの環境に合わせて修正してください！</b></p>
<ul>
<li><code>"/Users/yourname/projects/work"</code> や <code>"/Users/yourname/documents/personal"</code> の部分は、<b>あなたがテーマを切り替えたい実際のディレクトリパス</b>に修正してください。</li>
<li><code>"Work Theme"</code>、<code>"Personal Theme"</code>、<code>"Default"</code> は、<b>ステップ1であなたがiTerm2で作成したプロファイルの名前</b>に正確に合わせてください。</li>
</ul>
<h3>設定の反映</h3>
<p><code>~/.zshrc</code> に上記のコードを追記したら、ターミナルを再起動するか、以下のコマンドを実行して設定を再読み込みします。</p>
<p><response-element class="" ng-version="0.0.0-PLACEHOLDER"><code-block _nghost-ng-c3844426358="" class="ng-tns-c3844426358-688 ng-star-inserted"></code-block></response-element></p>
<div _ngcontent-ng-c3844426358="" class="code-block ng-tns-c3844426358-688 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" jslog="223238;track:impression;BardVeMetadataKey:[[&quot;r_7236cad7b46e0bc8&quot;,&quot;c_d615f67ec21b33fe&quot;,null,&quot;rc_9a72fd6ecd384a95&quot;,null,null,&quot;ja&quot;,null,1,null,null,1,0]]">
<div _ngcontent-ng-c3844426358="" class="code-block-decoration header-formatted gds-title-s ng-tns-c3844426358-688 ng-star-inserted">
<p><span _ngcontent-ng-c3844426358="" class="ng-tns-c3844426358-688">Bash</span></p>
<div _ngcontent-ng-c3844426358="" class="buttons ng-tns-c3844426358-688 ng-star-inserted"><button _ngcontent-ng-c3844426358="" aria-label="コードをコピー" mat-icon-button="" mattooltip="コードをコピー" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger copy-button ng-tns-c3844426358-688 mat-unthemed ng-star-inserted" mat-ripple-loader-uninitialized="" mat-ripple-loader-class-name="mat-mdc-button-ripple" mat-ripple-loader-centered="" jslog="179062;track:generic_click,impression;BardVeMetadataKey:[[&quot;r_7236cad7b46e0bc8&quot;,&quot;c_d615f67ec21b33fe&quot;,null,&quot;rc_9a72fd6ecd384a95&quot;,null,null,&quot;ja&quot;,null,1,null,null,1,0]];mutable:true"><span class="mat-mdc-button-persistent-ripple mdc-icon-button__ripple"></span><mat-icon _ngcontent-ng-c3844426358="" role="img" fonticon="content_copy" class="mat-icon notranslate google-symbols mat-ligature-font mat-icon-no-color" aria-hidden="true" data-mat-icon-type="font" data-mat-icon-name="content_copy"></mat-icon><span class="mat-focus-indicator"></span><span class="mat-mdc-button-touch-target"></span></button></div>
</div>
<div _ngcontent-ng-c3844426358="" class="formatted-code-block-internal-container ng-tns-c3844426358-688">
<div _ngcontent-ng-c3844426358="" class="animated-opacity ng-tns-c3844426358-688">
<pre _ngcontent-ng-c3844426358="" class="ng-tns-c3844426358-688"><code _ngcontent-ng-c3844426358="" role="text" data-test-id="code-content" class="code-container formatted ng-tns-c3844426358-688"><span class="hljs-built_in">source</span> ~/.zshrc
</code></pre>
</div>
</div>
</div>
<p>&nbsp;</p>
<p>これで設定は完了です！</p>
<h3>動作確認</h3>
<p>実際にテーマを切り替えたいディレクトリに <code>cd</code> してみてください。 例えば、<code>/Users/yourname/projects/work</code> ディレクトリに移動すると、「Work Theme」のiTerm2プロファイルが適用され、背景色やフォントが切り替わるはずです。そして、別のディレクトリに移動すると、「Default」テーマに戻るのを確認できるでしょう。</p>
<h3>ちょっとしたヒント</h3>
<ul>
<li><code>if</code>文の条件を増やすことで、さらに多くのディレクトリやプロジェクトに対して異なるテーマを設定できます。</li>
<li><code>*"</code> の部分は、指定したパスがディレクトリ名のどこかに含まれていればマッチするという意味です。より厳密に特定のディレクトリだけを対象にしたい場合は、<code>"$PWD" == "/Users/yourname/exact/path"</code> のように <code>=</code> を使って記述することも可能です。</li>
</ul>
<p>これで、あなたのiTerm2環境は、さらに快適で視覚的に分かりやすいものになったはずです。ぜひこの機能を活用して、ターミナル作業をより効率的で楽しいものにしてください！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/2136/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>DynamoDBが分からなすぎるの少しわかるまでに至る</title>
		<link>https://otonan-syusyoku.work/archives/1988</link>
					<comments>https://otonan-syusyoku.work/archives/1988#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Tue, 12 Nov 2024 06:48:01 +0000</pubDate>
				<category><![CDATA[インフラ]]></category>
		<category><![CDATA[生涯独学]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[サーバー]]></category>
		<category><![CDATA[脱3流プログラマー]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1988</guid>

					<description><![CDATA[みなさんは、DynamoDB 使っていますか〜？ 僕は一度もありません。 アプリケーションエンジニアとしてRDBMSは何度も触ってきたのですが、 NoSQLの代表的なサービスを触る機会が実務で出てきたので、ざっくり理解す [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>みなさんは、DynamoDB 使っていますか〜？</p>
<p>僕は一度もありません。</p>
<p>アプリケーションエンジニアとしてRDBMSは何度も触ってきたのですが、<br />
NoSQLの代表的なサービスを触る機会が実務で出てきたので、ざっくり理解するところまでに至りたいと思い記事を執筆しています。</p>
<p><a href="https://otonan-syusyoku.work/archives/1674/lets-go" rel="attachment wp-att-1680"><img fetchpriority="high" decoding="async" src="https://otonan-syusyoku.work/wp-content/uploads/2024/02/Lets-GO.png" alt="Let&#96;s GO" width="1000" height="500" class="aligncenter size-full wp-image-1680" srcset="https://otonan-syusyoku.work/wp-content/uploads/2024/02/Lets-GO.png 1000w, https://otonan-syusyoku.work/wp-content/uploads/2024/02/Lets-GO-300x150.png 300w, https://otonan-syusyoku.work/wp-content/uploads/2024/02/Lets-GO-768x384.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></p>
<h2>特徴</h2>
<h3><strong>フルマネージドのNoSQLデータベース</strong></h3>
<p>AWSがインフラの管理を行うため、ユーザーはインフラのメンテナンスを気にせずに使用可能。</p>
<h3><strong>自動スケーリングと高いパフォーマンス</strong></h3>
<p>読み書きのスループットを自動でスケールさせ、オンデマンドモードではアクセス量に応じたパフォーマンスが提供されます。</p>
<h3><strong>高可用性と耐障害性</strong></h3>
<p>データは複数のリージョンやアベイラビリティゾーンに分散して保存されるため、障害耐性が高く、可用性が99.999%を実現しています。</p>
<h3><strong>柔軟なデータモデル</strong></h3>
<p>各アイテムに異なる属性を持たせることができるスキーマレスデザインを採用しており、データ構造の変更が容易です。</p>
<h3><strong>トランザクション対応</strong></h3>
<p>ACIDトランザクションをサポートしているため、複数のテーブル間で整合性を維持しながらデータを操作できま<br />
(RDBMSと比較すると弱い</p>
<h2>ユースケース</h2>
<h3>アプリケーション</h3>
<h4><strong>IoTデバイスやモバイルアプリのバックエンド</strong></h4>
<p>リアルタイムのデータを扱い、大量のリクエストを処理する必要があるIoTデバイスやモバイルアプリケーションのデータストアとして適しています。</p>
<h4><strong>リアルタイムアナリティクス</strong></h4>
<p>DynamoDB Streamsを利用して、データ変更を他のシステムでリアルタイムに処理できます。変更があるたびにLambdaで処理するアーキテクチャが一般的です。</p>
<h4><strong>ECサイトやソーシャルアプリのセッション管理</strong></h4>
<p>DynamoDBの高速な読み書き性能を活かして、ECサイトのセッション管理やソーシャルアプリのユーザー活動データの保存に利用されます。</p>
<h3>IaC（Infrastructure as Code: Terraform）</h3>
<h4><strong>複数環境でのデプロイ</strong></h4>
<p>テスト環境・本番環境用のDynamoDBテーブルを、同じコードで異なる環境にデプロイ可能。これにより、環境間の設定の違いを一元管理しやすくなります。</p>
<h2>機能</h2>
<h3><strong>DynamoDB Streams</strong></h3>
<p>データの変更をストリームとして記録し、変更イベントに対してリアルタイムでアクション（例：Lambdaを使用した処理）を実行可能です。</p>
<h3><strong>セカンダリインデックス</strong></h3>
<p>主キー以外の属性を指定してクエリを実行できるようにするための「グローバルセカンダリインデックス(GSI)」と、同一パーティションキーで異なるソートキーを持つ「ローカルセカンダリインデックス(LSI)」があります。</p>
<h3><strong>自動スケーリング</strong></h3>
<p>読み書きキャパシティのスループットを動的に調整可能で、ピーク時のトラフィックに合わせて自動でスケーリングされます。</p>
<h3><strong>バックアップとリカバリ</strong></h3>
<p>DynamoDBはオンデマンドバックアップとポイントインタイムリカバリ（PITR）をサポートし、指定された時点にデータを復元できます。</p>
<h3><strong>DAX (DynamoDB Accelerator)</strong></h3>
<p>キャッシュ機能であるDAXを利用することで、ミリ秒単位の応答が要求されるアプリケーションのパフォーマンスをさらに向上できます。</p>
<h3><strong>トランザクション機能</strong></h3>
<p>ACID特性を持つトランザクションをサポートしており、一貫性のあるデータ処理が可能です。</p>
<p>&nbsp;</p>
<h2>RDBMSとの違いまとめ</h2>
<table border="1">
<thead>
<tr>
<th>項目</th>
<th>DynamoDB</th>
<th>RDBMS</th>
</tr>
</thead>
<tbody>
<tr>
<td>データモデル</td>
<td>スキーマレスのNoSQL。テーブルとアイテム形式。</td>
<td>リレーショナルモデル。行と列形式で固定スキーマ。</td>
</tr>
<tr>
<td>スケーラビリティ</td>
<td>水平スケーリング対応。オンデマンドスケーリングが可能。</td>
<td>垂直スケーリングが一般的。水平スケーリングは難しい。</td>
</tr>
<tr>
<td>トランザクション</td>
<td>ACIDトランザクション対応だが、複雑なトランザクションには非推奨。</td>
<td>ACIDトランザクションを標準サポート。複数テーブル間の処理が容易。</td>
</tr>
<tr>
<td>クエリとインデックス</td>
<td>SQL非対応。主キーやインデックスによるクエリが中心。</td>
<td>SQL対応。JOINを含む複雑なクエリが可能。</td>
</tr>
<tr>
<td>スキーマの柔軟性</td>
<td>スキーマレス。柔軟なデータ構造に対応。</td>
<td>固定スキーマ。テーブル構造の変更にはスキーマ変更が必要。</td>
</tr>
<tr>
<td>コスト</td>
<td>オンデマンドやプロビジョンドスループットに基づく柔軟な料金体系。</td>
<td>ライセンスやインフラ費用が発生。追加リソースにコストがかかる。</td>
</tr>
<tr>
<td>ユースケース</td>
<td>IoTデータ、モバイルアプリ、リアルタイム分析、セッション管理。</td>
<td>銀行業務、ERPシステム、データ分析、複雑なリレーション管理。</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1988/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【今日の覚書】static メソッドは適切に</title>
		<link>https://otonan-syusyoku.work/archives/1817</link>
					<comments>https://otonan-syusyoku.work/archives/1817#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Thu, 12 Sep 2024 07:50:30 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[生涯独学]]></category>
		<category><![CDATA[LAMP]]></category>
		<category><![CDATA[コーディング]]></category>
		<category><![CDATA[脱3流プログラマー]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1817</guid>

					<description><![CDATA[static おじさんになりかけたので、備忘録として学習の記録を残します。 I`m PHPer!!!!! 便利なstatic PHPの static メソッドは、インスタンスを生成せずにクラスから直接呼び出せるメソッドで [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>static おじさんになりかけたので、備忘録として学習の記録を残します。</p>
<p>I`m PHPer!!!!!</p>
<h2>便利なstatic</h2>
<p>PHPの <strong>static メソッド</strong>は、インスタンスを生成せずにクラスから直接呼び出せるメソッドです。</p>
<h2>使うべきタイミング</h2>
<p><a href="https://otonan-syusyoku.work/archives/1095/php" rel="attachment wp-att-1098"><img decoding="async" src="https://otonan-syusyoku.work/wp-content/uploads/2022/03/PHP.png" alt="PHP" width="1000" height="500" class="aligncenter size-full wp-image-1098" srcset="https://otonan-syusyoku.work/wp-content/uploads/2022/03/PHP.png 1000w, https://otonan-syusyoku.work/wp-content/uploads/2022/03/PHP-300x150.png 300w, https://otonan-syusyoku.work/wp-content/uploads/2022/03/PHP-768x384.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></p>
<h3>状態を持たない処理</h3>
<p>インスタンスの状態に依存しない、独立した処理を行う場合に適しています。例えば、ユーティリティ関数やヘルパー関数などがこれに該当します。</p>
<pre class="line-numbers"><code class="language-php">class MathHelper {
  public static function add($a, $b) {
    return $a + $b;
  }
}

echo MathHelper::add(3, 4); // 出力: 7
</code></pre>
<p>&nbsp;</p>
<h3>ファクトリーメソッド</h3>
<p>クラスのインスタンスを生成するメソッド（ファクトリーメソッド）として使用されることがあります。</p>
<p>この場合、<strong>`new`キーワード</strong>を隠蔽して、インスタンス化の過程を制御できます。</p>
<pre class="line-numbers"><code class="language-php">class User {
  public $name;

  private function __construct($name) {
    $this-&gt;name = $name;
  }

  public static function create($name) {
    return new self($name);
  }
}

$user = User::create('John Doe');
</code></pre>
<p>&nbsp;</p>
<p>あまり使いたくないね。。。</p>
<p>&nbsp;</p>
<h2>シングルトンパターン</h2>
<p>特定のクラスのインスタンスが一つだけ存在することを保証するシングルトンパターンの実装に利用されます。</p>
<pre class="line-numbers"><code class="language-php">&lt;?php

class Singleton
{
    private static $instance;

    private function __construct()
    {
// プライベートコンストラクタ
    }

    public static function getInstance()
    {
        if (self::$instance === null) {
            self::$instance = new self();
        }
        return self::$instance;
    }
}

$singleton = Singleton::getInstance();
</code></pre>
<p>&nbsp;</p>
<h2>だめな使い方</h2>
<h3>インスタンスの状態を操作する処理</h3>
<p>インスタンスの状態に依存するメソッドに`static`を使うべきではありません。<code>static</code>メソッドはクラスレベルで動作するため、インスタンス固有の状態を保持することができません。</p>
<pre class="line-numbers"><code class="language-php">class User {
  private $name;

  public static function setName($name) {
    $this-&gt;name = $name; // エラー: $thisを使えない
  }
}
</code></pre>
<p>&nbsp;</p>
<h3>過度な使用</h3>
<p>全てのメソッドを`static`にすることは避けるべきです。</p>
<p><code>static</code>メソッドを多用すると、オブジェクト指向プログラミングの基本原則である<code>カプセル化</code>や<code>多態性</code>が損なわれる可能性があります。<br />
特に、後からメソッドをオーバーライドする必要が出てきた場合に柔軟性を失います。</p>
<h3>依存性注入の回避</h3>
<p><code>static</code>メソッドは依存性注入と相性が悪く、テストやメンテナンスが難しくなる場合があります。テスト可能なコードを維持するためには、インスタンスメソッドを使用し、必要な依存関係をコンストラクタやセッターで注入する方が望ましいです。</p>
<h2>まとめ</h2>
<p><code>static</code> メソッドは、クラス固有の処理やユーティリティ関数として適切に使用することで、コードの構造を明確にし、インスタンス化を不要にするメリットがあります。ただし、過度な使用はオブジェクト指向の原則を損なう可能性があるため、状況に応じて適切に使い分けることが重要です。</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1817/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【プログラマーに捧ぐ】インフラに興味を持ちましょう</title>
		<link>https://otonan-syusyoku.work/archives/1794</link>
					<comments>https://otonan-syusyoku.work/archives/1794#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Sat, 27 Jul 2024 01:44:26 +0000</pubDate>
				<category><![CDATA[仕事の独り言]]></category>
		<category><![CDATA[業務]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[インフラ]]></category>
		<category><![CDATA[脱3流プログラマー]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1794</guid>

					<description><![CDATA[こんにちは、プログラマーの皆さん。 今回は、ソフトウェア開発の一環として非常に重要なインフラストラクチャ（以下、インフラ）についてお話ししたいと思います。 多くのプログラマーがコードを書くことに夢中になる一方で、インフラ [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>こんにちは、プログラマーの皆さん。</p>
<p>今回は、ソフトウェア開発の一環として非常に重要なインフラストラクチャ（以下、インフラ）についてお話ししたいと思います。</p>
<p>多くのプログラマーがコードを書くことに夢中になる一方で、インフラについてはあまり関心を持たないことがあります。<br />
しかし、インフラに興味を持つことは、より強力でスケーラブルなアプリケーションを作成するために不可欠です。</p>
<h2>インフラとは？</h2>
<p>インフラとは、ソフトウェアが動作するための基盤となるハードウェア、ネットワーク、ストレージ、クラウドサービスなどを指します。これには、サーバーの設定、ネットワークの構築、データベースの管理、スケーリングのためのクラウドサービスの利用などが含まれます。</p>
<h2>なぜインフラに興味を持つべきか？</h2>
<ol>
<li><strong>パフォーマンスの最適化</strong>: インフラの知識があると、アプリケーションのパフォーマンスを最適化するための適切なリソースを選択し、設定することができます。</li>
<li><strong>信頼性の向上</strong>: 適切なインフラの設計は、アプリケーションのダウンタイムを最小限に抑え、信頼性を向上させるのに役立ちます。</li>
<li><strong>スケーラビリティ</strong>: インフラを理解していると、トラフィックの増加に対応できるスケーラブルなアーキテクチャを設計することが可能です。</li>
<li><strong>セキュリティの強化</strong>: インフラのセキュリティを強化することで、アプリケーションを攻撃から守ることができます。</li>
<li><strong>多角的な課題解決</strong>: プログラム以外の手段として、インフラの変更や最適化を考慮することで、課題解決の選択肢が増えます。例えば、コードの最適化だけでなく、サーバーのスケールアップやネットワーク設定の見直しも有効な解決策となります。</li>
</ol>
<h2>具体的に考えてみよう</h2>
<p>例えば、あるウェブアプリケーションのパフォーマンスが悪く、ユーザーからのクレームが増えている状況を考えてみましょう。</p>
<p>この場合、<strong>最初に考えるのはコードの最適化</strong>かもしれません。<br />
効率的なアルゴリズムを使用したり、データベースクエリを最適化することが効果的です。</p>
<p>しかし、これだけが解決策ではありません。</p>
<p>インフラ観点で考えてみましょう。</p>
<h3>サーバーのスケールアップ</h3>
<p>現在のサーバーがトラフィックに対応しきれていない場合、サーバーのスケールアップ（より強力なサーバーにアップグレード）を検討できます。</p>
<p>これにより、リソース不足によるパフォーマンス低下を防ぐことができます。</p>
<p>例えば、EC2インスタンスのサイズをt3.smallからt3.largeに変更することで、CPUとメモリリソースが増加し、パフォーマンスが向上する可能性があります。</p>
<h3>ロードバランシングの導入</h3>
<p>トラフィックが特定のサーバーに集中している場合、ロードバランサーを導入することで、トラフィックを複数のサーバーに分散させることができます。これにより、各サーバーの負荷が軽減され、全体のパフォーマンスが向上します。</p>
<p>AWS Application Load Balancer（ALB）を使用して、複数のEC2インスタンス間でトラフィックを分散することで、スケーラビリティと信頼性を向上させることができます。</p>
<p>&nbsp;</p>
<p>また、ALBではパスルーティングを設定することが可能なため、重たい処理専用のサーバーで処理をするといったことも考えることができます。</p>
<p>その際にはログイン情報を引き継ぐといったことも考える必要が出てくるため、Redisなどのミドルウェアも視野に入れる必要があります。</p>
<p><a href="https://otonan-syusyoku.work/archives/1794/alb" rel="attachment wp-att-1806"><img decoding="async" src="https://otonan-syusyoku.work/wp-content/uploads/2024/07/alb.png" alt="alb" width="1091" height="681" class="aligncenter size-full wp-image-1806" srcset="https://otonan-syusyoku.work/wp-content/uploads/2024/07/alb.png 1091w, https://otonan-syusyoku.work/wp-content/uploads/2024/07/alb-300x187.png 300w, https://otonan-syusyoku.work/wp-content/uploads/2024/07/alb-1024x639.png 1024w, https://otonan-syusyoku.work/wp-content/uploads/2024/07/alb-768x479.png 768w" sizes="(max-width: 1091px) 100vw, 1091px" /></a></p>
<h3>サーバーレスの選択</h3>
<p>AWS Lambda といったサーバーレスアーキテクチャを選択することも視野に入れると良いです。</p>
<p>サーバーレスを利用することで、サーバーの管理が不要になり、スケーリングも自動で行われます。</p>
<p>（Lambdaには制約があるので注意。この<a href="https://qiita.com/shibadai/items/fd483ccd2ad8c8d89c1a">記事</a>わかりやすいよ</p>
<p><a href="https://otonan-syusyoku.work/archives/1794/lambfa" rel="attachment wp-att-1808"><img decoding="async" src="https://otonan-syusyoku.work/wp-content/uploads/2024/07/lambfa.png" alt="lambda" width="1091" height="641" class="aligncenter size-full wp-image-1808" srcset="https://otonan-syusyoku.work/wp-content/uploads/2024/07/lambfa.png 1091w, https://otonan-syusyoku.work/wp-content/uploads/2024/07/lambfa-300x176.png 300w, https://otonan-syusyoku.work/wp-content/uploads/2024/07/lambfa-1024x602.png 1024w, https://otonan-syusyoku.work/wp-content/uploads/2024/07/lambfa-768x451.png 768w" sizes="(max-width: 1091px) 100vw, 1091px" /></a></p>
<h3>キャッシュ戦略</h3>
<p>結果をキャッシュサーバーに格納していこうぜぇぇぇ</p>
<p><a href="https://otonan-syusyoku.work/archives/1794/elastic-2" rel="attachment wp-att-1809"><img decoding="async" src="https://otonan-syusyoku.work/wp-content/uploads/2024/07/elastic-1.png" alt="elastic" width="1091" height="641" class="aligncenter size-full wp-image-1809" srcset="https://otonan-syusyoku.work/wp-content/uploads/2024/07/elastic-1.png 1091w, https://otonan-syusyoku.work/wp-content/uploads/2024/07/elastic-1-300x176.png 300w, https://otonan-syusyoku.work/wp-content/uploads/2024/07/elastic-1-1024x602.png 1024w, https://otonan-syusyoku.work/wp-content/uploads/2024/07/elastic-1-768x451.png 768w" sizes="(max-width: 1091px) 100vw, 1091px" /></a></p>
<p>&nbsp;</p>
<h3>ネットワーク設定の最適化</h3>
<p>ネットワークの設定を見直し、遅延を最小限に抑えるための最適化を行うことも重要です。</p>
<p>例えば、コンテンツデリバリネットワーク（CDN）を使用して、静的コンテンツをユーザーに近い場所から提供することで、応答時間を短縮できます。</p>
<p>CloudFrontを利用して、画像やJavaScriptファイルなどの静的リソースをキャッシュし、グローバルに分散されたエッジロケーションから提供することで、ユーザー体験を向上させることができます。</p>
<h2>具体的に何を学ぶべきか？</h2>
<ol>
<li><strong>サーバー管理</strong>: Linuxの基本的なコマンド、サーバーのセットアップ、SSHの使用方法を学びましょう。</li>
<li><strong>クラウドサービス</strong>: AWS、Azure、Google Cloudなどの主要なクラウドプロバイダーのサービスについて理解し、使いこなせるようにしましょう。</li>
<li><strong>コンテナ技術</strong>: DockerやKubernetesなどのコンテナ技術を学ぶことで、アプリケーションのデプロイメントが効率的になります。</li>
<li><strong>ネットワークの基礎</strong>: IPアドレス、サブネット、DNS、ロードバランシングなどの基本的なネットワーク概念を理解しましょう。</li>
<li><strong>インフラストラクチャー・アズ・コード（IaC）</strong>: TerraformやCloudFormationを使用して、コードでインフラを管理する方法を学びましょう。</li>
</ol>
<h2>最後に</h2>
<p>インフラの知識は、プログラマーにとって非常に有益です。</p>
<p>コードを書くことだけでなく、そのコードが動作する環境について理解することで、より優れたソフトウェアを作成することができます。<br />
さらに、プログラム以外の手段としてインフラを活用することで、課題解決の幅が広がります。ぜひ、インフラに興味を持ち、自身のスキルセットを拡充していきましょう。</p>
<p>このブログが皆さんのインフラへの関心を高めるきっかけとなれば幸いです。次回もお楽しみに！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1794/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>世界一流エンジニアの思考法を自分の中に落とし込む</title>
		<link>https://otonan-syusyoku.work/archives/1762</link>
					<comments>https://otonan-syusyoku.work/archives/1762#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Sun, 12 May 2024 06:04:47 +0000</pubDate>
				<category><![CDATA[仕事の独り言]]></category>
		<category><![CDATA[DevOps]]></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=1762</guid>

					<description><![CDATA[世のエンジニアの皆様。日々業務の取り組みお疲れ様です。 都内で三流プログラマーとして働いているやんやんです。 世界一流エンジニアの思考法 を自分の中に落とし込む記事を書いています。 本書の紹介 世界一流エンジニアの思考法 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>世のエンジニアの皆様。日々業務の取り組みお疲れ様です。</p>
<p>都内で三流プログラマーとして働いているやんやんです。</p>
<p><strong>世界一流エンジニアの思考法 </strong>を自分の中に落とし込む記事を書いています。</p>
<h2>本書の紹介</h2>
<p style="text-align: center;"><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%2FB0CKSZV5DQ" rel="nofollow" referrerpolicy="no-referrer-when-downgrade"><img decoding="async" src="https://images-fe.ssl-images-amazon.com/images/I/41PjuwcEzYL._SL500_.jpg" alt="" style="border: none;" /><br />
世界一流エンジニアの思考法 (文春e-book)</a><img decoding="async" src="//i.moshimo.com/af/i/impression?a_id=2019667&amp;p_id=170&amp;pc_id=185&amp;pl_id=4062" alt="" width="1" height="1" style="border: none;" /></p>
<h2>一流との違い</h2>
<h3>試行錯誤は悪</h3>
<p><strong>分かるようになるまで自分でどうにかする </strong>もしくは <strong>質問できるレベルになるまで自分で調べる </strong>という形で取り組んできた自分からするとかなり衝撃的だった。</p>
<p>本書では、<span class="sc_marker blue"><strong>その試行錯誤の時間は正解を探しているだけで何も新しい知識を学んでいない</strong></span>となかなかのパンチラインを残している。</p>
<p>何も学んでいない = 次の問題がやってきたときに対処ができないということになるのだろう。</p>
<p>確かにその通りだ。</p>
<p>ログから手当たり次第に試すのではなく、この<span class="sc_marker blue"><strong>ログがどこでどのように吐かれたのか、依存関係や背景を基に何が原因か考えることができるようになりたい。</strong></span> ← 凄く難しくないか？</p>
<h3>理解に時間をかける</h3>
<p>これは日々痛感しているのだが、仕事のできる上司はかなり理解力が高く、コミュニケーションを取ることに対して引け目を感じていた。</p>
<p>本書では、どんなに能力が高い人でも理解に時間がかかることを説明していた。</p>
<p>僕の上司も「今までに〇〇をXXしてきたから」「これはあの時に苦しんだから」と時間なり、それ相応の苦労をしてきたと言っていた。</p>
<p>本書ではビッグテックの現場で出ている体験を基にしているので、世界レベルのエンジニアでも理解することに対して時間がかかるのだろう。</p>
<p>これまでの積み重ねで皆頑張っているんだと何故か共感できた。</p>
<div class="sc_frame_wrap inline orange">
<div class="sc_frame_title">理解するために今後やりたいこと</div>
<div class="sc_frame">
<ul>
<li>program の基礎をしっかり学ぶ
<ul>
<li><a href="https://exercism.org/">exercism</a> を解く</li>
</ul>
</li>
<li>インフラ周りの知識ちゃんと学ぶ
<ul>
<li>ネットワークってなんでつながるの</li>
</ul>
</li>
<li>僕ごときのそこら辺にいる若造なんて時間がかかって当たり前なので、気後れせずに頑張りたい所存</li>
</ul>
</div>
</div>
<h3>小さなドキュメントをコードの前に書く</h3>
<p>これは技術レベルに関係なく、すぐ実践できることなので今日から実践していきたい。</p>
<p><strong>今から何を作るのか理解するために小さなドキュメントを書いていく。</strong></p>
<ul>
<li>Scope</li>
<li>Background</li>
<li>Problem</li>
<li>Solution</li>
</ul>
<p>確か、岡田斗司夫も同じようなことを言っていた。</p>
<p><iframe loading="lazy" title="【効果は僕が保証します】賢い人は既に始めている「書く習慣」何故今こそ「紙」に書くべきなのか【岡田斗司夫切り抜き/切り取り/としおを追う/スマートノート/ジャーナル/禁欲/オナ禁】" width="640" height="360" src="https://www.youtube.com/embed/8hqYqhoH-cU?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></p>
<h2>マインドセット</h2>
<h3>BeLazy</h3>
<p>BeLazy = 怠惰 という意味になるが、そのままの意味ではなく、<strong>「少ない時間で価値を最大化しなさい」</strong>という教えがあった。（プログラマの三大美徳の怠惰と同様の考え方。</p>
<p>これを達成するためが以下のことだと考える。</p>
<ul>
<li>やるべきことを絞る</li>
<li>それ以外はやらない</li>
</ul>
<p>やるべきことを達成したら、またやるべきことを絞り、、、というサイクルを回して価値を最大化していく。</p>
<p>ビジネスマンである限り、ここで言われていることは目指すべきではあるがそう簡単ではないというのが現実である。</p>
<p>それでも言っていることは正しいと思うので近づけるよう努力したい。</p>
<h3>リスクや間違いを受け入れる</h3>
<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>話を戻す。</p>
<p>成功へ早く近づくために、失敗を受け入れるマインドを持つ必要がある。</p>
<ul>
<li>早く失敗する</li>
<li>失敗から学ぶ</li>
</ul>
<p><span class="sc_marker blue"><strong>まずはやってみて、そこから学んで次へ進んでいくようにしたい。</strong></span></p>
<p>&nbsp;</p>
<h2></h2>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1762/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のDocコメントについて今更学んでみた</title>
		<link>https://otonan-syusyoku.work/archives/1588</link>
					<comments>https://otonan-syusyoku.work/archives/1588#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Mon, 15 Jan 2024 14:08:10 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[脱3流プログラマー]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1588</guid>

					<description><![CDATA[PHPer は技術者のレベルの差が激しいと言われている言語です。 恥ずかしい思いをしないためにもDocコメントの基礎くらいは知っておきたいところです。 Docコメントのメリット 可読性・視認性が高くなる 何をするのか・ど [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>PHPer は技術者のレベルの差が激しいと言われている言語です。</p>
<p>恥ずかしい思いをしないためにもDocコメントの基礎くらいは知っておきたいところです。</p>
<h2>Docコメントのメリット</h2>
<h3>可読性・視認性が高くなる</h3>
<p>何をするのか・どのようなデータを持っているのかなどが一目で分かる。</p>
<p>一目でわかるこそ、保守開発時には大いに役に立チマス。（正直これだけ書くモチベーションになれます。</p>
<h3>ツールに影響する</h3>
<p>PHPStan や PHPUnit などのツールを使用する際に大きく役に立つ。</p>
<p>特に静的解析の精度向上に役に立ち、バグの発生や早期発見にすんげぇ貢献してくれる。<span></span></p>
<h2>Docコメントのデメリット</h2>
<h3>めんどくさい</h3>
<p>Docコメントを書く事が猛烈にめんどくさい日がたまにあります。</p>
<p>メリットをちゃんと理解しているので、めんどくさい日でもちゃんと書きます。みなさんも書きましょう。</p>
<h3>不適切な内容だとツラい</h3>
<p>Docコメントに書いてある内容が間違っていると誤解を生み、新たな仕事を発生させることがある。</p>
<p>最近ではある大手のサービスのSDKのDocコメントが間違っており、IDE上の警告が消えないために時間を費やしてしまう事件がありました。（多分Docコメントのメンテナンスされていないだけかな…？）</p>
<p>みんなもキヲツケテネ。</p>
<h2>書き方</h2>
<p>こんな感じで書くよ。(改行がおかしいのは許してね)</p>
<pre class="line-numbers"><code class="language-php">/**
* 何をするメソッドなのか 
*
* @param 変数
* @return 戻り値
*/
private function fuga(): void {}



/**
* プロパティの説明
*
* @var string
*/
protected string $hogehoge
</code></pre>
<p>&nbsp;</p>
<h2>型定義</h2>
<table style="border-collapse: collapse; width: 100%;">
<tbody>
<tr style="border-color: #6dd5f2; background-color: #6abbeb;">
<td style="width: 17.0387%;"><span style="color: #ffffff;">type</span></td>
<td style="width: 17.0387%;"><span style="color: #ffffff;">説明</span></td>
</tr>
<tr style="height: 45px;">
<td style="height: 45px; width: 41.4062%;">string</td>
<td style="height: 45px; width: 58.5938%;">文字列</td>
</tr>
<tr style="height: 45px;">
<td style="height: 45px; width: 41.4062%;">integer / int</td>
<td style="height: 45px; width: 58.5938%;">整数</td>
</tr>
<tr style="height: 45px;">
<td style="height: 45px; width: 41.4062%;">boolean / bool</td>
<td style="height: 45px; width: 58.5938%;">真偽値</td>
</tr>
<tr style="height: 45px;">
<td style="height: 45px; width: 41.4062%;">float / double</td>
<td style="height: 45px; width: 58.5938%;">浮動小数点数</td>
</tr>
<tr style="height: 45px;">
<td style="height: 45px; width: 41.4062%;">object</td>
<td style="height: 45px; width: 58.5938%;">任意のクラスのインスタンス</td>
</tr>
<tr style="height: 45px;">
<td style="height: 45px; width: 41.4062%;">mixed</td>
<td style="height: 45px; width: 58.5938%;">任意の型（不特定）</td>
</tr>
<tr style="height: 45px;">
<td style="height: 45px; width: 41.4062%;">array</td>
<td style="height: 45px; width: 58.5938%;">配列</td>
</tr>
<tr style="height: 45px;">
<td style="height: 45px; width: 41.4062%;">resource</td>
<td style="height: 45px; width: 58.5938%;">リソース型</td>
</tr>
<tr style="height: 45px;">
<td style="height: 45px; width: 41.4062%;">void</td>
<td style="height: 45px; width: 58.5938%;">値を返さない</td>
</tr>
<tr style="height: 45px;">
<td style="height: 45px; width: 41.4062%;">null</td>
<td style="height: 45px; width: 58.5938%;">NULL値</td>
</tr>
<tr style="height: 45px;">
<td style="height: 45px; width: 41.4062%;">callable</td>
<td style="height: 45px; width: 58.5938%;">コールバック関数</td>
</tr>
<tr style="height: 45px;">
<td style="height: 45px; width: 41.4062%;">false / true</td>
<td style="height: 45px; width: 58.5938%;">真または偽</td>
</tr>
<tr style="height: 45px;">
<td style="height: 45px; width: 41.4062%;">self</td>
<td style="height: 45px; width: 58.5938%;">同じクラスのインスタンス</td>
</tr>
<tr style="height: 45px;">
<td style="height: 45px; width: 41.4062%;">scalar</td>
<td style="height: 45px; width: 58.5938%;">スカラー型（string, int, boolなど）</td>
</tr>
</tbody>
</table>
<p>参考：<a href="https://docs.phpdoc.org/3.0/guide/references/phpdoc/types.html">https://docs.phpdoc.org/3.0/guide/references/phpdoc/types.html</a></p>
<h2>タグの意味</h2>
<table style="border-collapse: collapse; width: 100%;">
<tbody>
<tr style="border-color: #6dd5f2; background-color: #6abbeb;">
<td style="width: 17.0387%;"><span style="color: #ffffff;">Tag Name</span></td>
<td style="width: 39.1367%;"><span style="color: #ffffff;">意味</span></td>
<td style="width: 43.8244%;"><span style="color: #ffffff;">用法の例</span></td>
</tr>
<tr>
<td style="width: 17.0387%;">@param</td>
<td style="width: 39.1367%;">パラメータを記述<br />
※メソッドのDocコメントに使ったりするよ</td>
<td style="width: 43.8244%;">@param int $age 年齢</td>
</tr>
<tr>
<td style="width: 17.0387%;">@return</td>
<td style="width: 39.1367%;">戻り値を記述</td>
<td style="width: 43.8244%;">@return string ユーザーの名前を返します</td>
</tr>
<tr>
<td style="width: 17.0387%;">@var</td>
<td style="width: 39.1367%;">変数の型を記述<br />
※プロパティのDocコメントに使ったりするよ</td>
<td style="width: 43.8244%;">@var string $name ユーザーの名前</td>
</tr>
<tr>
<td style="width: 17.0387%;">@throws</td>
<td style="width: 39.1367%;">例外を記述</td>
<td style="width: 43.8244%;">@throws InvalidArgumentException 不正な引数の場合</td>
</tr>
<tr>
<td style="width: 17.0387%;">@deprecated</td>
<td style="width: 39.1367%;">非推奨を示す</td>
<td style="width: 43.8244%;">@deprecated 2.0.0バージョン以降で非推奨</td>
</tr>
<tr>
<td style="width: 17.0387%;">@see</td>
<td style="width: 39.1367%;">関連要素を参照</td>
<td style="width: 43.8244%;">@see User::getName() 関連するメソッド</td>
</tr>
<tr>
<td style="width: 17.0387%;">@author</td>
<td style="width: 39.1367%;">作者名</td>
<td style="width: 43.8244%;">@author 山田太郎</td>
</tr>
<tr>
<td style="width: 17.0387%;">@since</td>
<td style="width: 39.1367%;">導入されたバージョン</td>
<td style="width: 43.8244%;">@since 1.0.0 初期バージョンから導入</td>
</tr>
<tr>
<td style="width: 17.0387%;">@version</td>
<td style="width: 39.1367%;">バージョン</td>
<td style="width: 43.8244%;">@version 1.2.3</td>
</tr>
<tr>
<td style="width: 17.0387%;">@link</td>
<td style="width: 39.1367%;">関連リンク</td>
<td style="width: 43.8244%;">@link http://example.com 詳細情報</td>
</tr>
<tr>
<td style="width: 17.0387%;">@example</td>
<td style="width: 39.1367%;">例示</td>
<td style="width: 43.8244%;">@example /path/to/example.php 例示コード</td>
</tr>
<tr>
<td style="width: 17.0387%;">@category</td>
<td style="width: 39.1367%;">カテゴリ分類</td>
<td style="width: 43.8244%;">@category HTTP クライアント関連</td>
</tr>
</tbody>
</table>
<p>参考：<a href="https://docs.phpdoc.org/3.0/guide/references/phpdoc/index.html">https://docs.phpdoc.org/3.0/guide/references/phpdoc/index.html</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1588/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ステートフルとステートレスについてざっくり理解しよう！</title>
		<link>https://otonan-syusyoku.work/archives/1569</link>
					<comments>https://otonan-syusyoku.work/archives/1569#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Thu, 04 Jan 2024 07:56:42 +0000</pubDate>
				<category><![CDATA[インフラ]]></category>
		<category><![CDATA[絶対に必要なIT基礎知識]]></category>
		<category><![CDATA[脱3流プログラマー]]></category>
		<category><![CDATA[設計]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1569</guid>

					<description><![CDATA[みなさん、こんにちは！ 今日はちょっとマニアックな話、ステートフルとステートレスについてお話ししたいと思います。 これ、聞いたことあるけどよくわからないって人、多いんじゃないかな？ でも大丈夫、ここでしっかり理解していき [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>みなさん、こんにちは！</p>
<p>今日はちょっとマニアックな話、ステートフルとステートレスについてお話ししたいと思います。<br />
これ、聞いたことあるけどよくわからないって人、多いんじゃないかな？<br />
でも大丈夫、ここでしっかり理解していきましょう！</p>
<h2>ステートフルって何？</h2>
<p>まずはステートフルについて。</p>
<p>ステートフルっていうのは、端的に言うと<strong>「過去の情報を覚えている状態」</strong>のこと。<br />
システムが過去にどんな処理をしたかを記憶していて、それをもとに次の動作を決めるんです。</p>
<p>例えば、Webサイトにログインする時を考えてみてください。<br />
<strong>一度ログインすると、そのサイトは「あ、この人はもう認証済みだな」と覚えてくれてますよね。</strong><br />
これがステートフルな動作。ユーザーの状態を保持して、その情報に基づいて何らかの処理をするわけです。</p>
<h3>具体例</h3>
<ol>
<li><strong>Webセッション管理</strong>：<br />
ユーザーがWebサイトにログインしたとき、サーバーはそのユーザーのセッション情報（例えば、認証情報、プロファイル設定など）を保持します。この情報は、ユーザーがサイトをナビゲートする間、持続し、適切なコンテンツやオプションを提供するために使用されます。</li>
<li><strong>データベーストランザクション</strong>：<br />
データベースは、過去のクエリやトランザクションの履歴を追跡し、それに基づいてデータの整合性を保持します。たとえば、銀行の取引記録は、口座の残高を正確に保つために重要です。</li>
</ol>
<h2>じゃあステートレスって？</h2>
<p>一方で、ステートレスはその逆。</p>
<p>つまり、<strong>「過去の情報を覚えていない状態」</strong>を指します。<br />
こっちは、過去の情報に左右されずに、その都度独立して処理を行います。</p>
<p>たとえば、HTTPプロトコル。<br />
これ、実はステートレスなんですよ。<br />
ウェブサーバーは、同じユーザーからのリクエストでも、それぞれを完全に別々のものとして扱うんですね。<strong>だから毎回、ページをリロードするたびに「誰この人？」ってなるわけです。</strong></p>
<h3>具体例</h3>
<ol>
<li><strong>HTTPプロトコル</strong>：<br />
HTTPはステートレスプロトコルです。ウェブサーバーは、同一のクライアントからの複数のリクエストを関連づけません。各リクエストは独立しており、サーバーはそれぞれのリクエストを新規のものとして処理します。</li>
<li><strong>RESTful API</strong>：<br />
RESTアーキテクチャはステートレスであり、各APIリクエストは他のリクエストから独立しています。例えば、REST APIを通じてリソースを取得するリクエストは、以前のリクエストやその結果とは無関係に処理されます。</li>
</ol>
<h2>ステートフルとステートレス、使い分けは？</h2>
<p>これら二つ、どちらが良いとか悪いとかではなくて、用途によって使い分けるのが大事。</p>
<p>ステートフルは、ユーザーに合わせたカスタマイズや複雑な処理が必要な場合に向いています。<br />
一方、ステートレスはシンプルさとスケーラビリティが求められる場合、例えば大規模なWebサービスとかにぴったり。</p>
<p>要は、状況に応じて臨機応変に使い分けることが大切。<br />
システム設計する時は、この二つの特性をよく理解して、最適なアーキテクチャを選んでいきましょう！</p>
<h2>まとめ</h2>
<p>いかがでしたか？<br />
ステートフルとステートレス、ちょっと難しいけど、この話を押さえておけば、システムの動きを理解するのに役立つはず。</p>
<p>ぜひこの知識を活用して、もっとITの世界を楽しんでいってくださいね！それでは、また次回！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1569/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【vscode】Docker環境にてPHPが参照できない問題を解消</title>
		<link>https://otonan-syusyoku.work/archives/1562</link>
					<comments>https://otonan-syusyoku.work/archives/1562#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Wed, 03 Jan 2024 13:31:32 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[vscode]]></category>
		<category><![CDATA[個人開発]]></category>
		<category><![CDATA[脱3流プログラマー]]></category>
		<category><![CDATA[開発]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1562</guid>

					<description><![CDATA[VisualStudioCode にてPHPのエラー ある日、突然 vscode が動かなくなるという恐ろしい症状に出くわしました。（業務では PHPStorm を使用しているので、vscode の勝手があまりわからない [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>VisualStudioCode にてPHPのエラー</h2>
<p>ある日、突然 vscode が動かなくなるという恐ろしい症状に出くわしました。（業務では PHPStorm を使用しているので、vscode の勝手があまりわからない。。。）</p>
<pre class="line-numbers"><code class="language-other">PHP executable not found. Install PHP and add it to your PATH or set the php.debug.executablePath setting</code></pre>
<p>「PHPの実行ファイルがねーぞ！」というエラー文言、 Docker にて環境構築をしている事が原因あろうと想像つきます。</p>
<div class="sc_frame_wrap inline orange">
<div class="sc_frame_title"><span class="sc_frame_icon"><i class="fa fa-exclamation-triangle" aria-hidden="true"><span>fa-exclamation-triangle</span></i></span>注意</div>
<div class="sc_frame shadow">
<p>後から知ったんですけど、Dockerにて環境構築を行っていたとしても<br />
ローカルにPHPがインストールされている &amp;&amp; vscode にパスが通っている場合はエラーは出ないっぽいです。<br />
今動けば良いという人はローカルにインストールとパスを通せば動くと思います！</p>
</div>
</div>
<h2>PHPコンテナへのパスを追加する</h2>
<p>仕事のできる先輩へ相談したところ、すぐに返事をもらえました。</p>
<div class="voice left">
<div class="icon">
<p><img decoding="async" src="https://otonan-syusyoku.work/wp-content/uploads/2020/10/名称未設定のデザイン-69.png" /></p>
<div class="name">先輩</div>
</div>
<div class="text sc-inner-content sc_balloon left blue">
<p>コンテナへのパスを定義するだけで解決すんでー</p>
</div>
</div>
<p>&nbsp;</p>
<p>それだけで解決するわけ無いだろ！って思ったんですけど大人しく従ってみることにしました。</p>
<p>&nbsp;</p>
<h3>手順1：プロジェクト固有の設定ファイルを定義する準備</h3>
<p>vscode にはプロジェクト単位で設定ファイルを作成することができます（知らんかった…</p>
<p>プロジェクトの第一階層に .vscode というディレクトリを切りましょう。</p>
<div class="sc_frame_wrap inline blue">
<div class="sc_frame_title"><span class="sc_frame_icon"><i class="fa fa-exclamation-triangle" aria-hidden="true"><span>fa-exclamation-triangle</span></i></span>Tips</div>
<div class="sc_frame shadow">
<p>まじで知らなかったんですけど、 vscode のドキュメントはかなり充実しています。<br />
時間ある人は読んでみると良いかもです。<br />
<a href="https://code.visualstudio.com/docs">ドキュメント</a></p>
</div>
</div>
<h3>手順2：コンテナへのパスを定義しよう</h3>
<p>プロジェクト固有のディレクトリの中にPHPが動作しているコンテナへのパスを書いたshellファイルを定義しましょう。</p>
<p>こんな感じ↓</p>
<pre class="line-numbers"><code class="language-other">docker exec -it `コンテナ名` php $@</code></pre>
<table style="border-collapse: collapse; width: 100%;">
<tbody>
<tr>
<td style="width: 50%;"><strong><code>docker exec</code></strong></td>
<td style="width: 50%;"><code>docker exec</code> コマンドは、実行中のDockerコンテナ内でコマンドを実行するために使用されます。</td>
</tr>
<tr>
<td style="width: 50%;"><strong><code>-it</code></strong></td>
<td style="width: 50%;"><code>-it</code> は二つのオプションの組み合わせです。</p>
<ul>
<li><code>-i</code> (<code>--interactive</code>) はコンテナの標準入力を開いた状態に保つ</li>
<li><code>-t</code> (<code>--tty</code>) は仮想ターミナルインターフェイスを割り当てます。</li>
</ul>
</td>
</tr>
<tr>
<td style="width: 50%;"><strong><code>$@</code></strong></td>
<td style="width: 50%;"><code>$@</code>はシェルスクリプトにおける特別な変数で、すべての位置パラメータを表します。スクリプトに渡されたすべての引数を<code>php</code>コマンドに渡します。</td>
</tr>
</tbody>
</table>
<h3>手順3：vscode の設定ファイルを定義しよう</h3>
<p>プロジェクト固有のディレクトリの中に settings.json というファイルを定義しましょう。</p>
<p>vscode 本体に設定することも可能なんですけど、一つのプロジェクトしか触らないというエンジニアは居ないと思うので、プロジェクト固有の設定を記述していきましょう。</p>
<p>設定ファイルの中身はこんな感じ↓</p>
<pre class="line-numbers"><code class="language-php">{
    // 手順2で作成したシェルファイルを定義
    "php.debug.executablePath": "./container-php.sh"
}</code></pre>
<p>ちなみにファイル名が「setting.json」だとvscodeが認識してくれません！<br />
「settings.json」というファイル名してくださいね！</p>
<p>&nbsp;</p>
<h2>先輩に感謝</h2>
<p>先輩にコーヒーとタバコをおごりました。</p>
<p>感謝致します。</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1562/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>[React] useStateとuseEffectってすごく便利じゃん</title>
		<link>https://otonan-syusyoku.work/archives/1382</link>
					<comments>https://otonan-syusyoku.work/archives/1382#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Thu, 17 Aug 2023 16:17:59 +0000</pubDate>
				<category><![CDATA[好きではないJS]]></category>
		<category><![CDATA[JS]]></category>
		<category><![CDATA[React]]></category>
		<category><![CDATA[脱3流プログラマー]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1382</guid>

					<description><![CDATA[今までjQueryで戦ってきたのですが、とうとう見切りをつけて次のステップに進もうとしているコテツです… Reactの考え方 React では、DOM 要素を直接操作する代わりに、React の状態管理やレンダリング方法 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>今までjQueryで戦ってきたのですが、とうとう見切りをつけて次のステップに進もうとしているコテツです…</p>
<h2>Reactの考え方</h2>
<p>React では、DOM 要素を直接操作する代わりに、React の状態管理やレンダリング方法を使用して操作を行うことが推奨されているとのこと。</p>
<h2>useState</h2>
<p>useState フックは、状態（state）を React コンポーネント内で管理するために使用します。状態は、コンポーネント内でのデータの変更を追跡し、自動的に再レンダリングするために使われます。</p>
<p>差分取って差分の分だけレンダリングするっぽいですね。楽だし早いね。</p>
<p>Reactの基本理念？である状態管理で差分を取るってのがuseStateの肝な気がする。</p>
<h2>useEffect</h2>
<p>コンポーネントのレンダリング後に実行される処理(データ)を管理するために使用します。</p>
<p>useEffect フックは第1引数に副作用の関数を受け取り、第2引数には、依存する値の配列を指定します。この配列に指定した値が変更された場合に副作用関数が再実行されます。</p>
<p>空の配列を指定することで、初回レンダリング時にのみ副作用関数が実行されることを意味します。</p>
<pre class="line-numbers"><code class="language-js">    const [csrfToken, setCsrfToken] = useState(null);
    useEffect(() =&gt; {
        // メタタグからトークンを取得
        const metaTag = document.querySelector('meta[name="csrf-token"]');
        if (metaTag) {
            setCsrfToken(metaTag.content);
        }
    }, []);</code></pre>
<p>なんとなくonloadっぽい。。。</p>
<h3>注意点</h3>
<h4>第二引数に何も指定しない</h4>
<p>無限ループ発生します。ローカル端末が燃えます。気をつけましょ。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1382/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
