<?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/%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0/feed" rel="self" type="application/rss+xml" />
	<link>https://otonan-syusyoku.work</link>
	<description>三流プログラマー</description>
	<lastBuildDate>Thu, 12 Sep 2024 07:50: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>コーディング &#8211; エンジニア見習い</title>
	<link>https://otonan-syusyoku.work</link>
	<width>32</width>
	<height>32</height>
</image> 
	<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 fetchpriority="high" 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>【PHP】僕がInterfaceを使う理由</title>
		<link>https://otonan-syusyoku.work/archives/1801</link>
					<comments>https://otonan-syusyoku.work/archives/1801#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Sat, 27 Jul 2024 01:51:31 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[生涯独学]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[コーディング]]></category>
		<category><![CDATA[三流プログラマー]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1801</guid>

					<description><![CDATA[PHPでの開発を進める中で、Interfaceを使うことが多くなりました。 Interfaceは、コードの可読性や保守性を向上させる強力なツールです。 この記事では、僕がInterfaceを使う理由とその利点について、具 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>PHPでの開発を進める中で、Interfaceを使うことが多くなりました。</p>
<p>Interfaceは、コードの可読性や保守性を向上させる強力なツールです。</p>
<p>この記事では、僕がInterfaceを使う理由とその利点について、具体例を交えながら説明します。</p>
<h2>コードの一貫性を保つ</h2>
<p>Interfaceを使うことで、プロジェクト全体で一貫したメソッドシグネチャを保つことができます。例えば、複数のクラスが同じ操作を実行する場合、それぞれのクラスに同じメソッドを実装させることが可能です。これにより、コードを読む際にメソッドの名前や引数の形式に迷うことがなくなります。</p>
<pre class="line-numbers"><code class="language-php">interface LoggerInterface {
  public function log(string $message): void;
}

class FileLogger implements LoggerInterface {
  public function log(string $message): void {
    // ファイルにログを記録する処理
  }
}

class DatabaseLogger implements LoggerInterface {
  public function log(string $message): void {
    // データベースにログを記録する処理
  }
}
</code></pre>
<p>&nbsp;</p>
<h2>依存関係の注入を容易にする</h2>
<p>Interfaceを使うことで、依存関係の注入が容易になります。</p>
<p>特定のクラスに依存するのではなく、Interfaceに依存することで、将来的にクラスを変更する場合でも、コード全体に大きな影響を与えずに済みます。</p>
<pre class="line-numbers"><code class="language-php">class UserController {
  private $logger;

  public function __construct(LoggerInterface $logger) {
    $this-&gt;logger = $logger;
  }

  public function createUser(string $name): void {
    // ユーザー作成の処理
    $this-&gt;logger-&gt;log("User created: $name");
  }
}
</code></pre>
<p>&nbsp;</p>
<h2>テストの容易化</h2>
<p>Interfaceを使用することで、テストが容易になります。<br />
モックオブジェクトやスタブを使って、依存関係を簡単に置き換えることができるため、ユニットテストの実行が簡単になります。</p>
<p>モックができないとUTが書きづらい場面が多々出てくるので、そのためだけに Interface を使っていると言っても過言ではないです。</p>
<pre class="line-numbers"><code class="language-php">class MockLogger implements LoggerInterface {
  public function log(string $message): void {
    // テスト用のモック処理
  }
}

$logger = new MockLogger();
$controller = new UserController($logger);
$controller-&gt;createUser('John Doe');
// ここでログが正しく動作するかをテスト
</code></pre>
<p>&nbsp;</p>
<h2>拡張性の向上</h2>
<p>Interfaceを使うことで、新しい機能の追加が容易になります。</p>
<p>例えば、新しいタイプのLoggerを追加する場合、既存のコードを変更することなく、新しいクラスを追加するだけで済みます。</p>
<pre class="line-numbers"><code class="language-php">class EmailLogger implements LoggerInterface {
  public function log(string $message): void {
    // メールにログを送信する処理
  }
}
</code></pre>
<p>&nbsp;</p>
<h2>まとめ</h2>
<p>Interfaceを使うことで、コードの一貫性、依存関係の管理、テストの容易化、拡張性の向上といった多くの利点があります。PHPでの開発において、Interfaceを効果的に活用することで、より健全で保守性の高いコードを実現することができます。ぜひ、皆さんもInterfaceの利点を活用してみてください。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1801/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 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>【ジュニア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 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>【PHP】PHPのスプレッド構文とはなんぞや</title>
		<link>https://otonan-syusyoku.work/archives/1318</link>
					<comments>https://otonan-syusyoku.work/archives/1318#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Sun, 28 May 2023 03:15:57 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[JS]]></category>
		<category><![CDATA[コーディング]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1318</guid>

					<description><![CDATA[スプレッド構文とは 配列やオブジェクトの要素を展開するための構文です。 この構文は、配列やオブジェクトをより簡潔かつ柔軟に操作するために使用されます。 スプレッド構文を使用すると、配列やオブジェクトの要素を取り出して、別 [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>スプレッド構文とは</h2>
<p>配列やオブジェクトの要素を展開するための構文です。</p>
<p>この構文は、配列やオブジェクトをより簡潔かつ柔軟に操作するために使用されます。</p>
<p>スプレッド構文を使用すると、配列やオブジェクトの要素を取り出して、別の配列やオブジェクトに組み込むことができます。<br />
配列の場合、要素を展開して別の配列に組み込むことができます。オブジェクトの場合、プロパティを展開して別のオブジェクトに組み込むことができます。</p>
<pre class="line-numbers"><code class="language-php">$test = [1, 2, 3];
$testUnion = [...$test, 4, 5, 6];

var_dump($testUnion); 
// [1, 2, 3, 4, 5, 6]</code></pre>
<pre class="line-numbers"><code class="language-php">$test = ['name' =&gt; 'tarou', 'age' =&gt; 30];
$testUnion = ['city' =&gt; 'Gifu', ...$person1];

var_dump($testUnion); 
// ['city' =&gt; 'Gifu', 'name' =&gt; 'tarou', 'age' =&gt; 30]
</code></pre>
<h2>使い所</h2>
<h3>複数の配列を結合したり、オブジェクトのプロパティを組み合わせたりする場合</h3>
<pre class="line-numbers"><code class="language-php">$test1 = [1, 2, 3];
$test2 = [4, 5, 6];
$testUniion = [...$numbers1, ...$numbers2];

var_dump($testUnion); 
// [1, 2, 3, 4, 5, 6]</code></pre>
<p>※array_merge()とやっていることは一緒。<br />
なので、基本的にarray_merge()を使用することは今後少なそう。</p>
<h3>配列やオブジェクトの一部の要素を変更する場合</h3>
<pre class="line-numbers"><code class="language-php">$original = [1, 2, 3, 4, 5];
$modified = [...array_slice($original, 0, 2), 6, ...array_slice($original, 3)];

var_dump($modified); 
//展開
array(5) {
[0]=&gt;
int(1)
[1]=&gt;
int(2)
[2]=&gt;
int(6)
[3]=&gt;
int(4)
[4]=&gt;
int(5)
}</code></pre>
<p>&nbsp;</p>
<h3>関数の引数として使用する場合</h3>
<pre class="line-numbers"><code class="language-php">function sum(...$numbers) {
  return array_sum($numbers);
}

$result = sum(1, 2, 3, 4, 5);

var_dump($result); 
//int(15)</code></pre>
<p>※シンプルに配列を渡せばいいのではないか？と思ったのですが、呼び出し元で渡している引数が無限に増えても対応できるので結構便利かもしれません。</p>
<h3>配列やオブジェクトのコピーを作成する場合</h3>
<pre class="line-numbers"><code class="language-php">$original = [1, 2, 3];
$copy = [...$original];

var_dump($copy); 
// [1, 2, 3]
</code></pre>
<h2>思う所</h2>
<h3>JSを使うPJならつかっても良いかな…？</h3>
<p>ES2015からJSでもスプレッド構文が出現しているとのことです。<br />
<a href="https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Spread_syntax">https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Spread_syntax</a></p>
<p>一応PHPの方が先に機能として発表しているのですが、何と言ってもJS様です。</p>
<p>JS様と統一性を持って記述ができるのが魅力かもしれませんね…</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1318/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【PHP】よく使うArray系関数[array_map,array_reduce,array_filter]</title>
		<link>https://otonan-syusyoku.work/archives/1312</link>
					<comments>https://otonan-syusyoku.work/archives/1312#respond</comments>
		
		<dc:creator><![CDATA[hrokig2]]></dc:creator>
		<pubDate>Sat, 27 May 2023 02:28:12 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[コーディング]]></category>
		<guid isPermaLink="false">https://otonan-syusyoku.work/?p=1312</guid>

					<description><![CDATA[配列の加工 これまでにforeachを使用して配列を任意の形に加工していた。 ところがどっこい、PHPには便利な関数が存在することを最近知った。 これまで配列から1つずつ要素を取り出し、所定の処理を実行していた自分が恥ず [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>配列の加工</h2>
<p>これまでにforeachを使用して配列を任意の形に加工していた。</p>
<p>ところがどっこい、PHPには便利な関数が存在することを最近知った。</p>
<p>これまで配列から1つずつ要素を取り出し、所定の処理を実行していた自分が恥ずかしい…</p>
<h2>array_map</h2>
<p>配列の各要素に所定の処理を行う関数。（結構よく使うようになった。だって便利だもん）</p>
<p>ぼかぁ、CSVを読み込んだ後に文字コードの変換等を行うときに結構使用する。</p>
<pre class="line-numbers"><code class="language-php">array_map(コールバック関数, 配列)</code></pre>
<pre class="line-numbers"><code class="language-php">$test =['ジョーダン', 'ジョンソン', 'ジャクソン'];

$testMap = array_map(function($t) {
    return 'マイケル' . $t;
}, $test);

var_dump($testMap);
array(3) {
[0]=&gt;
string(27) "マイケルジョーダン"
[1]=&gt;
string(27) "マイケルジョンソン"
[2]=&gt;
string(27) "マイケルジャクソン"
}
</code></pre>
<p>&nbsp;</p>
<p>連想配列を指定すると多次元配列として返ってくるのでそこだけは要注意。</p>
<pre class="line-numbers"><code class="language-php">$test =['ジョーダン', 'ジョンソン', 'ジャクソン']; 
$testMap = array_map(function($t) {
    return ["test" =&gt; 'マイケル' . $t]; 
}, $test);
var_dump($testMap);

array(3) {
  [0]=&gt;
  array(1) {
    ["test"]=&gt;
    string(27) "マイケルジョーダン"
  }
  [1]=&gt;
  array(1) {
    ["test"]=&gt;
    string(27) "マイケルジョンソン"
  }
  [2]=&gt;
  array(1) {
    ["test"]=&gt;
    string(27) "マイケルジャクソン"
  }
}</code></pre>
<p>&nbsp;</p>
<h2>array_filter</h2>
<p>名前の通りフィルタリングしてくれるっす。基本的にはarray_map()と一緒です。</p>
<p>ただし内部的にはempty()が実行されているようなので、配列から空を除去できるらしい。(いつ使うのか想像できないけれど、)</p>
<pre class="line-numbers"><code class="language-php">$test =['ジョーダン', '', 'ジャクソン'];

$testFilter = array_filter($test);

var_dump($testFilter);

array(2) {
  [0]=&gt;
  string(15) "ジョーダン"
  [2]=&gt;
  string(15) "ジャクソン"
}</code></pre>
<h2>array_reduce</h2>
<p>配列の要素を1つの値に加工してくれる関数。</p>
<p>チェックボックス等で指定された検索条件（配列）をSQLの条件式に割り当てるときに使用できる。</p>
<p>今回は生SQLに無理やり割り当てているが、ORMの場合は結構使いやすい。</p>
<pre class="line-numbers"><code class="language-php">$test =['1', '2', '3']; 

$query = '1=1';
$testFilter = array_reduce($test,  function($carry,$item) {
	$carry = $carry . ' OR test_column = '. $item;
	return $carry;	
}, $query);

var_dump($testFilter);
string(60) "1=1 OR test_column = 1 OR test_column = 2 OR test_column = 3"
</code></pre>
<p>&nbsp;</p>
<p>array_reduce()に渡している要素がなくなるまで、以下の処理が繰り返される。</p>
<ol>
<li>$testのインデックスが0の値を抽出し、クロージャの$itemに格納し処理をする。</li>
<li>1つの処理が終了すると$carryに値を保持する</li>
<li>最後に$carryを返却</li>
</ol>
<p>ちなみにarray_reduce()の第三引数に一番最初に処理を実行する前の初期データ$queryを渡しているが、省略することができる。</p>
<pre class="line-numbers"><code class="language-php">&lt;?php
$test =['1', '2', '3']; 

$testFilter = array_reduce($test,  function($carry,$item) {
	$carry = $carry . ' OR test_column = '. $item;
	return $carry;	
});

var_dump($testFilter);
string(57) " OR test_column = 1 OR test_column = 2 OR test_column = 3"
?&gt;</code></pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://otonan-syusyoku.work/archives/1312/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>
	</channel>
</rss>
