【WordPress】functions.phpについて

WordPressのテーマをカスタマイズしていると、「functions.php」というファイルを目にすることがあります。
functions.phpは、WordPressに機能を追加したり、テーマの動作を変更したりする際に使用するPHPファイルです。
今回は、そのfunctions.phpとはどのようなファイルなのか、また、どのような場面で使用するのかについて簡単に説明していきます。

■functions.phpとは

functions.phpは、WordPressのテーマに用意されているPHPファイルの一つです。
テーマには、Webサイトの見た目を決めるCSSや、ページを表示するためのPHPファイルなど、さまざまなファイルが含まれています。その中でもfunctions.phpは、テーマに機能や処理を追加するために使用されます。
例えば、以下のような処理をfunctions.phpに記述することができます。

  • WordPressに独自の機能を追加
  • 管理画面のカスタマイズ
  • CSSやJavaScriptを読み込む
  • 自作関数の定義
  • 自作ショートコードの登録

このように、functions.phpを利用することでテーマに機能を追加したり、WordPressの動作をカスタマイズすることができます。

■functions.phpに処理を追加する

ここでは、functions.phpに実際に処理を追加する例を紹介します。
例えば、テーマ内にある”css/custom.css”というCSSファイルを読み込みたい場合、functions.phpに以下のように記述します。

[/crayon]

“wp_enqueue_style()”を使ってCSSファイルを読み込み、”add_action()”で処理を実行するタイミングを指定しています。
このように、”functions.php”ではWordPressが用意している関数やフックを利用して、さまざまな処理を追加することができます。

■functions.phpを編集する際の注意点

functions.phpは便利なファイルですが、PHPの記述を間違えるとWordPressが正常に動作しなくなる場合があります。
そのため、functions.phpを編集する前にバックアップを取っておくと安心です。
また、テーマのfunctions.phpを直接編集する際も注意が必要です。
テーマを更新すると編集した内容が上書きされてしまう場合があります。そのため、テーマをカスタマイズする際は、子テーマを利用するなどしてテーマを更新した後も変更した内容が残るようにしておくことが重要です。

■functions.phpとプラグインの違い

WordPressに機能を追加する方法として、functions.phpのほかにプラグインを利用する方法があります。
functions.phpは、基本的に現在使用しているテーマに機能を追加するために使用します。一方、プラグインはテーマとは別に機能を追加することができます。そのため、テーマを変更した後も使用したい機能については、プラグインとして追加するほうが適している場合があります。追加したい機能がテーマに関係するものなのか、テーマを変更しても必要なものなのかを考えて、使い分けることが重要です。

■最後に

今回は、WordPressのfunctions.phpについて簡単にまとめました。
functions.phpを利用することで、CSSやJavaScriptの読み込みをはじめ、WordPressにさまざまな機能を追加することができます。
また、functions.phpではWordPressのフックや関数を利用することが多いため、WordPressをPHPでカスタマイズする際には、覚えておきたいファイルの一つです。
ただし、記述を間違えるとサイトの動作に影響する可能性があるため、編集する際にはバックアップを取るなど、注意して作業することが大切です。


【WordPress】フックについて

今回は、WordPressの「フック」について簡単に説明します。
WordPressでPHPを使ってカスタマイズを行う際には、フックを利用することが多くあります。フックにはいくつか種類がありますが、今回は基本となる「アクションフック」と「フィルターフック」について説明します。

■フックとは

フックとは、WordPressの処理に自分の用意した処理を追加したり、既存の値を変更したりするための仕組みです。
WordPressには、ページの表示や記事の登録など様々なタイミングでフックが用意されています。そのため、WordPress本体のファイルを直接編集しなくても「functions.php」などから独自の処理を追加することができます。
フックは大きく分けて以下の2種類があります。

  • アクションフック
  • フィルターフック

それぞれ役割が異なるため、用途に応じて使い分けます。

■アクションフック

アクションフックは、WordPressの特定の処理が実行されるタイミングで、自分で用意した処理を実行するために使用します。
例えば、ページのフッター部分にメッセージを追加する場合は、以下のように記述します。

[/crayon]

“wp_footer”は、ページの下部で処理を実行するためのアクションフックです。
この例では、”add_action()”を使って”my_footer_message()”を登録しているため、フッターが表示されるタイミングでメッセージが表示されます。
このように、「あるタイミングで処理を実行したい」という場合にアクションフックを使用します。

■フィルターフック

フィルターフックは、WordPressが扱っている値を変更したい場合などに使用します。
例えば、記事の本文の最後に「この記事を読んでいただきありがとうございました。」という文章を追加する場合は、以下のように書くことができます。

[/crayon]

この例では、”add_filter()”を使って”my_add_message()”という関数を”the_content”に登録しています。
“the_content”は、記事の本文を扱うためのフィルターフックです。
“my_add_message()”では、引数として受け取った記事本文に文章を追加し、変更後の本文を”return”しています。そのため、記事を表示すると、もともとの本文に「この記事を読んでいただきありがとうございました。」という文章が追加されます。
このように、「WordPressが扱っている値を受け取り、内容を変更して返したい」という場合にフィルターフックを使用します。

■アクションフックとフィルターフックの違い

2つの違いを簡単にまとめると、以下のようになります。

種類用途
アクションフック特定のタイミングで処理を実行する
フィルターフックWordPressが扱う値を変更する

例えば、「ページが表示されるタイミングでCSSを読み込みたい」という場合はアクションフックを使用します。一方、「記事の本文を変更したい」という場合はフィルターフックを使用します。
この違いを覚えておくと、フックを使う際にどちらを利用すればよいか判断しやすくなります。

■フックを使うときの注意点

フックを使用するとWordPressのさまざまな処理をカスタマイズできますが、どのフックを使うかによって処理が実行されるタイミングや、扱える値が異なります。そのため、使用する前にそのフックが「いつ実行されるのか」「どのような値を扱えるのか」を確認することが大切です。
また、”functions.php”に処理を追加する場合は、記述を間違えるとサイトの動作に影響する可能性があります。編集する際には、事前にバックアップを取るなど、注意して作業することが重要です。

■最後に

今回は、WordPressのフックについて簡単に説明しました。
フックを利用することで、WordPress本体のファイルを直接編集することなく、独自の処理を追加したり、既存の値を変更したりすることができます。
特に”functions.php”を使ってWordPressをカスタマイズする場合には、アクションフックとフィルターフックを利用する機会が多くあります。
最初は少し分かりにくいかもしれませんが、「処理を追加するならアクション」「値を変更するならフィルター」と覚えておくと分かりやすいと思います。

プログラミング未経験の私が今、「入社前にこれやっておけば良かったな~」と思っていること。

 2026年4月に入社した新入社員です。もうすぐ入社してから半年が経つので、振り返りがてら1年前の自分に「これやっておけば?」と伝えたいことを書いていきます。

 これからこの業界で働きたい未経験の方の力になれれば幸いです。

その前に少し私のこと
  • 趣味の影響で、パソコンにはよく触っていた(Wordは完全に使い慣れている)
  • ExcelやTableauなどの表計算、ビジュアライズの資格を持っている
  • 文系か理系かで言えば、文系
  • 大学の学部も文系寄り

 です。

 ExcelやTableauの資格を持っていることが私にとっては大きなアドバンテージになっていたため、「いや~、プログラミングとかやったことないけど、私パソコン触り慣れてるし、きっと出来るでしょ!」と楽観的に考えていた私もいました。今のところは全く活きていないです。タイピングが早いことしか役立っていることはないです……。

プログラマーや会社主体で書いている記事を読む

 というわけで本題に戻ります。まずは「プログラマーや会社が主体となって書いている記事を読むこと」です。

 内部研修でコードを書くと、当然エラーが出ます。調べます。すると色んな人の書いた記事がブワーーーーッと出てくるわけです。1つの事象を取っても見る人によってアプローチの仕方は千差万別。本当に色んな記事がありすぎてどれから読めばいいか分からない。

 といっても急に「エラーの対処法が書いてある記事を読め」というわけではありません。そうではなく、「○○というアプリを開発しました」「××を使って会社のシステムを最適化しました」のようないかにも楽しそうな記事を読むことです。

 当然、中に書いてある「こういうコードを書いて△△を☆☆にして……」みたいなものが理解できなくても構いません。私もまだ全ては分かりませんし……。大事なのは、「自分も将来こういうことができるようになるかもしれない」という期待を持つことです。自分がなれるかもしれない未来の姿は、就職活動及び入社後のモチベーションになると思うんです。

 また、そのような記事は会社が主体となって書いていることが多いと感じました。会社によっては、「未経験の方にこういった姿勢を求めている」「こういう考え方をするといい」ということを丁寧に書いているところも。もしその会社に入らないとしても、そういった考えはどこでも通用するものだと思います。

 もし積極的に記事を投稿しているような会社を志望するならば、「○○というサイトで記事を読みました。特に××の記事が印象に残り……」と話のきっかけにもなるかもしれません。

 IT関連の記事が多く投稿されているサイトを3つ紹介します。

・Qiita

 一番よく閲覧します。タグが分かりやすいところに書いてあるため、どういう趣旨の記事なのかが分かりやすいです。「初心者向け」タグでの検索がオススメ。よくイベントも開催しているようで、トップ画面に見出しで堂々と出ます。

・Zenn

 次によく閲覧します。個人的にサイトデザインがシンプルで好きです。こっちの方が割と「やってみた」系の記事が多い印象です。

・note

 たまに見る。上記2つと違い技術関連がメインのサイトではないからかと。でもないわけではないので、覗いてみるのもアリです。

プログラミングに多少触っておく

 インターネット、少し探せば無料でプログラミングが少し練習できるよ! というサイトがゴロゴロ転がっています。ぜひやってみましょう。

 とはいっても、プログラミング言語……? ってなんだか沢山あるみたいだし、何から始めればいいか……と思った方。私もそう思っていました。

 知っているのは「HTML」という名前だけ(あとついでにCSS)。……というわけでそれに触れてみることにしました。調べてみると「Progate」というサイトを発見したので、これを使っていました。サイトデザインがかなりとっつきやすいですし、無料で会員登録ができて学習記録も残ります。

 もちろん、本当に初っ端の知識しか得ることができませんが、無いよりはマシだと考えています。面接では当然「プログラミングの経験はありますか?」ということがどこでも聞かれます。ここで「少しだけHTMLを勉強したことがあります」と答えることができました。

 ただ、この質問ではただ単にプログラミングの経験の有無を尋ねられているわけではなく、プログラミングに対する向き合い方/思い(辛いと思ったのか楽しいと思ったのか、等)を聞かれていると思っているので、上記回答だと少し不足していますが。

 ちなみに私は「エラーが出ると楽しくて……」という話をしました。プログラミングって本当に”正しく”打たないと動かないので、そこがツボに入りました……という主旨です。ただ私は本当に少ししか触ってなかったので、薄っぺらいことしか言えませんでした(しようと思えばもっと深い話ができた気がします)。話の材料にもなるので、ある程度触っておいた方が良いかと思います。

 上記で紹介したサイト以外にも、練習ができるサイトが沢山あると思います。ぜひ自分に合うものを見つけてみてください。もちろんお金を払ってもっと本格的な勉強をしてみるのもアリだと思います。

臨む姿勢について

 色んな人が言っていますが、素直であること。これが一番だと思います。

 先輩から言われたことを、分かりましたと受け止めること。分からなかったら分からないと正直に言うこと。困ったら困ったと相談すること。こういう姿勢が大事だと思いますし、面接でも見られていると思います。

 現場はとにかく(※会社にもよると思いますが)チーム作業です。私たちのような未経験者はいずれ、そこに飛び込んでいくわけです。その時に先輩の指示を聞けない人、不明点を放置する人、起こった問題を隠す人、間違いなくチームを乱します。

 素直さは、協調性とニアリーイコールかもしれません。

 もちろん今後チームでやっていくと意見の衝突などはあるかもしれませんが、それは入ってから考えればいいことだと思います。新入社員の最初の1年は、素直に人の言うことを聞き入れて、ひたむきに学んで技術を取り入れる期間です(と、私は考えています)。だからこそ面接は、「そこで躓いてしまわないか?」を見てもらう選考です。

 私もとにかく、素直さをアピールしました。今、その発言が嘘にならないよう素直にひたむきに頑張っています。研修の時に困りまくって先輩に泣きのメッセージを送った日も懐かしいです……笑

☝と笑い事にしましたが、結果的に「あの時相談して良かった」と思っています(相談することで不安が解消されたので)し、誰も損をしていないので、やはり素直さは大きな武器になると実感しました。

 今から素直になることを意識して行動しましょう。

人と自分を比べない

 上記した「素直さ」にも少し通ずるものがある話です。

 隣の芝生は青いという言葉がありますが、もう真っ青です。世の中にはすごい人が沢山いて、いかに自分の経験がないかということを突き付けられます。私がそうでした。

 私の話ですが、実は私は諸事情で就職活動のスタートがものすごく遅かったです。私が始めた頃には、周囲の人は就職活動が終わっている時期でした。

 でも周囲と比べる必要なんてありません。本当です。それより少しでも自分を見つめて、少しでも情報を集めて、少しでも勉強して、自分が今できる最善を選び続けて進み続ける。不安もあるかもしれませんが、出来ることは沢山あると思うので、少しでも多く不安を潰して前向きに取り組めるよう、ひたむきに頑張ってください。

まとめ

 今回はプログラミング未経験の私が今、入社前にやっておけば良かったと思っていることを中心にお話ししました。

 冒頭で話した通り、私は入社してもうすぐ半年になるまだ新入社員と呼ばれる立場の者なので、一概に全てが役に立つだろうと大きな声では言えません(採用担当でもないですし)。ただこの業界で就職活動をするにおいて、上記のことをやっていればもっと不安は小さく穏やかにできていたのではないのかな、と考えています。

 本記事が、「プログラミング未経験でもこうやって入れてる人がいるんだ」と思ってもらえる一助になっていれば幸いです。

外部研修で学んだマインド

 初めまして、この春入社したピカピカの新入社員です。

 初めての記事ということで何を書こうか悩んだのですが、4・5月は会社ではなく外部で色々学んできたため、初心を書き留めておくという意味でもそこでの経験についてお話していこうと思います。

 ……とは言っても知識面では正直、付け焼き刃と言わざるを得ない(まだ言語化するには圧倒的に経験が足りない)と感じるため、今回は心得──これから大事にしていきたいマインドを中心に記していきます。

軽く私のことについて

  • プログラミングの経験はほぼ皆無(HTMLに本当に少し触ったことがあるくらい)
  • タイピングは早い方だと自負しています

研修先のことについて

 研修先には弊社の新入社員だけでなく他の会社の新入社員もいらっしゃいました。プログラミングのスキルとしては千差万別という感じで、私は講義に付いていくだけで必死でしたが、他の方たちは+αも積極的に行っていた印象で、本当に圧倒されてしまいました。

 周囲との実力の差を感じる毎日で、自分にこの業界は向いていないのではないかと思い悩んでいました。毎日毎日新たな知識を叩き込まれ、余裕も全くなかったです。理解するのに必死で、+αなんてとんでもなかったです。

 だけどOJTの先輩に泣きの連絡を入れたり、おそらくそれを受けて上長の方からも労りのメッセージが入り(お二方、その節は大変お世話になりました……)、家族に話を聞いてもらったりと、なんとか自分を奮い立たせて乗り切ることができました。

 周囲と自分を比べても仕方がない。周囲は私よりずっと多くの経験をしていたのだから、実力に差があるのは当たり前。問題は「今」「私が」どうするかだ、と現状を捉え直して頑張りました。

今後必要だと感じたポイント

  • 周囲の人にきちんと相談すること
  • 諦めずに問題を解決しようとする心を持つこと

 この2点が必要だと、私は外部研修を通じて感じました。

 前者については、上記もしましたが「今こういうことを不安に思っていて」等ということを相談することは大切だと思います。

 人一人の力にはどうしても限界があり、一人で抱え込んでしまうとどこかで必ず綻びが生じてしまうでしょう。しかし他の人に相談すれば、自分でも気づいていなかった自分の問題を指摘してもらえたり、逆に「思っていたより大丈夫かもしれない」という安堵感を得ることができるかもしれません。

 不安や問題を放置しておくより、すぐに相談するのはとても大事なことだと思いました。

 後者については、プログラミングをやっていて感じたことです。

 やっていると、とにかく分からないことばかり出てきます。分からない単語、分からない方法、分からない文章……ただスマートフォンやパソコンに触るだけでは出会わないものばかりです。

 そんな時は、とにかく調べる。テキストを読んだりネットで検索したりして、とにかく答えを探す。もちろん一発で自分が納得して深く理解できるような答えは出てきません。だからこそ、答えが見つかるまで粘り強く探し続ける、諦めない心が重要だと感じました。

 それこそ自分ひとりで調べるのにも限界があるため、人に相談することも必要だな……と1つ目に戻ってきます笑

 もしかしたら、人に相談して、自分で調べて、人に相談して──……と、そういうサイクルが必要なのかもしれません。

まとめ

 というわけで今回は、外部研修で学んだマインドについてお話ししました。

 これから働くうえで、何かあれば周囲の人にきちんと相談すること、分からないことはすぐに諦めず調べていくことを大事にしていきたいと思います。

 これから頑張っていきますので、今後ともどうぞよろしくお願いします。

自分の行動をメモする癖をつけた話

 前略。私には記憶力がない。主に瞬間的な記憶力が。

 大事な用事をスマホのスケジュール帳に書き込もうとスマホのロックを外した瞬間、何のためにスマホを開いたのか忘れるような人間である。

 そんな私も内定をいただいて社会に出て、こうして内部研修を行っているわけだ。内部研修の内容は主に、自分でwebアプリケーションを作ってみようというもので。

 私が一番困ったのは、自分が作りたいページをどう作ればいいか分からなかった時でも、エラーが出ていつまで経っても想定通りのページが表示されないことでもない。

 いつに何をしたのか記録して提出すること、と先輩に言われたことである。

 というのも、自分で1からアプリケーションを作り始める前に作業見積書を作成していた。○日に××を行う、というのをまとめた表である。当然、それを用いて立てた予定と実際何日かかったのか見比べることになる。

 端的に言うと、私は困った。その日何をしたのか忘れたのではない。1つのことを連続して続けたのではなく、色んなことを同時並行で進めていたから困ったのである。

困った原因

 ページを作っていると、たびたびこういうことが発生する。

  • フォーム機能を実装する際、一緒にエラーメッセージも実装する
  • ユーザーログインと管理者ログインの仕組みが一緒なので、同時に実装する

 この時、「フォーム機能実装」と「エラー処理」、「ユーザーログイン機能」と「管理者ログイン機能」は別の作業工程として扱っていた。つまり別の作業を同時並行で行っていたことになる。

 だが私はこれを特に深く考えておらず、「今日はフォームを完成させた」、「今日はログイン機能を実装した」という一言で完結させていたのだ。具体的に何をしたのか、仔細が分からない。

退勤時にその日の作業内容を報告する、という決まりに助けられた

 見出し通りである。退勤時にその日の作業内容を報告することになっているのだが、これに助けられた。

 最初の方は上記のような、「フォームの完成」「ログインの実装」等アバウトに報告していたのだが、作業見積書と見比べるために後からその報告を見返すと、イマイチ何をしたのかよく分からない……と感じた。分かるのだが、それは輪郭が分かるだけで内情が分からない。例えば「ログインの実装」と一言に言っても、「保存してあるユーザーデータと参照して、一致したか判断できるようにした」「一致したらマイページに飛ぶようにした」等、できることは色々あるのに。

 それに気づいてからは、報告の際に具体性を意識するようにした。「検索機能を実装」と一言書くだけではなく、「年齢の範囲検索を実装」「都道府県を複数選択で検索」と、後から見返した時に何をしたのか分かるようにした。

 報告を具体的に書くと、実際の工程日も記載しやすくなった。今までアバウトになんとなく行っていたことが、「この工程に、総合的に○日掛けていたんだな」ということが可視化されるようになった。あとは具体的な報告を見返すと、「私は1日でこんなにやってたことがあるんだな……」と自分の頑張りを実感できる。

 ちなみに具体的に書いていない報告を見返した時は、それはもう実際の工程日の記載に苦労した。見返しても何をしたのか、当然覚えていないからだ。冒頭にも書いたが私には記憶力がない。○日に具体的に何をしたか、ということが引き出せるわけがない。もちろんなんとか埋めたが。

振り返りを記録するだけでなく、未来も記録するようになった

 何度も言うが私には記憶力がない。だから退勤時に今日やったことを報告する際、「私、午前中は何やってたっけ……?」となることも少なくない。もちろんなんとか捻り出すが。

 だから業務中は、何かを完了させた時にそれをメモに書くようになった。「ページを表示させるためのファイルを作った」や、「ログインしてから10分全く操作をしないと自動的にログアウトするようにした」等、自分に分かるように具体的に。

 退勤時にはそれを見返して、人に伝える用に丁寧に書き直して報告を完了させる。

 これを活かし、私は未来のことも記録するようになった。

 未来と言ってもそこまで大げさなことではなく、未来の自分にメッセージを残す、という意味である。

「今日の私は○○をしたから、明日の私は××をしてね」、とそういうことだ。でないと私は記憶力がないため、次に出勤をしてパソコンを開いて、「今日は何をするつもりだったんだっけ……?」となりかねない。土日を挟むと特に。

 そこで何をするつもりだったのか、と考える時間が無駄だ。だからメッセージを残しておく。

 そうすると「ここまでは完了した。だから次はこれをやるべき」と自分の作業を整理する癖がつき、それも良かったと思う。

「自分が何をしたか」を記録しておくことの重要性とまとめ

 今は1人で行っているからいいが、これから案件に入るとなると、チームメンバーと一緒に何か1つのものを作ることになるだろう。その時に

  • 現在位置を確認していない
  • 自分が何をするべきか、何をしたのかを把握していない

 このようなメンバーがいると、どこかでチームメンバーに迷惑をかけることになってしまうのではないかと考えた。

 ここで自分の記憶力のなさとそれに伴う不都合に気づき、こうしてメモを取る癖をつけられたのは良かったかもしれないと思う。

 これからも自分の行動を記録して、積み上げていきたい。

2025年 新入社員ブログ 篠原06 [あれから8か月]

2025年4月入社の篠原です。

6回に分けて、今までの業務で学んだことや自分のことについて紹介します。今回はその6回目になります。見ていただけると嬉しいです。

今回は入社から8か月経って思ったことについてご紹介します!

社会人になって

私はこれまで学生として過ごしていたので、そんな私が社会人としてこれから過ごしていけるか不安で、特に業務をこなせるかどうかや、これからお世話になる方々に迷惑がかからないかなど様々な不安がありました。

実際に入社した当初も、入社初日は入社式、1週間後には外部研修が始まり、慣れないことばかりだったのでずっと不安な状態でした。
でも今は不安な要素はなくなりました。現在携わっている業務も、難しいことはたくさんありますが、なんとかやっていけていると思っています。私がそう思えたのも、周りの方々が支えてくださったおかげです。

これからも恩返しの意味も込めてしっかりと貢献できるように頑張りたいです!

変わったこと

私が入社したときと現在で比べて、一番変わったのはLaravelを使ったコードの書き方がかなり理解できたことや、JavaScriptなど、技術的な部分に関する知識が多く身に付いたことです。

研修でLaravelを学んでいた時に比べるとすごく成長しているのを実感していて、例えばとある処理を実装したいとなった時に、当時は調べたものの中にある関数やその中に出てきた言葉の意味も調べる必要がありました。
それに対して現在は、関数や言葉の意味も少しずつ分かってきて、悩む時間が減ったのをとても実感しています。

まとめ

これまで6回に分けてブログを書かせていただきましたが、改めて今までの自分を振り返ることができたのでよかったです!
特に専門学校でプログラミングを学び始めてから今に至るまで、すごく成長したことが分かりました!
これからもこの若きプログラマーを見守っていただけると嬉しいです!

今回のお話はここまでです!
最後までご覧いただきありがとうございました!

新入社員ブログ 斎藤04[PHPUnitについて]

25年度入社の斎藤です。

 クラスやメソッド単位での動作を保証するために行う、単体テストというものがあります。今回は、テストコードを記述することで単体テストを自動化する機能をもつPHPUnitについて、Laravelのwebアプリケーションへの導入方法と使い方を簡単に説明しようと思います。

PHPUnitの導入方法

 Laravelを導入している場合、phpunitは標準でインストールされているため、特にインストール操作は必要ありません。

テストコードの作成

 PHPUnitでの単体テストは、テスト対象となるクラスとテストコードを1対1の関係で作成していきます。

Laravelプロジェクトフォルダ内で以下のコマンドを打つことで tests/units 配下に単体テストファイル(Sample_Test)を作成できます。

作成できたテストファイル tests/unit/Sample_Test.php にて以下のコード変更を行います。

※テストフォルダには、単体テストファイル用フォルダのtests/unit、結合テスト用のフォルダのtests/featureが存在します。unitフォルダ内に作成されるテストファイルは、厳密な単体テスト用のファイルとして作成されるため、デフォルトではLaravelが提供する外部依存機能機能(トランザクション、ファクトリー、シーダー、ファサード認証など)が使えません。しかし、実用的には単体テストにおいても、これらのLaravelの機能を含めた単体テストを行うことがあるので、上記のコードの変更を行いました。

結果、以下のようなテストコード(Sample_Test.php)のひな型が作成できます。

Sample_Test.php

次にテスト対象として、足し算、引き算の機能を持つクラス(SampleClass.php)を作成します。

SampleClass.php

これで、テスト対象となるクラス(SampleClass.php)とテストコード(Sample_Test.php)のひな型を1対1で用意できました。最後に、テストコードを編集して、テスト対象のクラスをテストできるようにします。

テストコードファイル内で追記する主な内容は

1.テストクラス内に、テスト対象のクラスのオブジェクトを定義する
 テストクラスの中で使用するテスト対象のオブジェクトを、プロパティ(変数)として宣言します。


2.setUp関数を定義する
各テストメソッドが実行される前に毎回自動で呼ばれる特別なメソッドです。
ここでテスト対象のオブジェクトを作成します。
こうすることで、テストメソッドごとに毎回新しい状態のオブジェクトを使えるようになり、テスト同士が影響し合うのを防げます。
parent::setUp()は初期化処理を継承するために必須の記述です。


3.テスト対象のメソッドごとにテストメソッドを作成する(テストメソッド名は test….)
基本的に、テスト対象のメソッド1つに対して、テストメソッドも1つ作成します。
テストメソッドごとに、テスト対象の各メソッドをテストしていくイメージです。
実際のテスト内容をここに記述します。
テストメソッド名はテスト対象のメソッド名と対応させると分かりやすいです。


4.テストメソッド内で、テスト対象クラスのオブジェクトからメソッドを呼び出し実行する

setUpメソッドで作成したテスト対象のオブジェクトを使って、実際にテストしたいメソッドを呼び出します。


5.メソッドを呼び出した後、期待する結果を検証していく(assertion)

期待する結果と実際の結果が一致しているかを検証する手段として、assertion(アサーション)が用意されています。
具体例として
・予測値と実際の結果を比較するメソッド : assertEquals()
・trueかどうかを検証するメソッド : assertTrue()
・配列の数を検証するメソッド : assertCount()
などがあります。
これをテストメソッド内で利用していきます。

これら1~5の内容をテストコード(Sample_Test.php)に追加すると以下のようになります。

あとはテストコードを実行するだけでテストを行えます。
テスト実行コマンドは以下の通りです。

作成した全てのテストファイルを実行する場合

特定のテストファイルを実行する場合

テストコードを実行すると以下のような結果が得られます。
今回の二つのメソッド(add、sub)は想定通りに機能していることが確認できました。

最後に

 PHPUnitを学んで率直に感じたことは、テストコードを記述していくことはかなり労力がかかる作業であるということです。テスト対象のコードとテストコードを対にして記述していく必要があるため、単純計算で2倍程度のコードを記述することになります。小規模なシステムや修正があまり発生しないコードでは、この労力は割に合わないかもしれません。しかし、システムが大規模になり、複数人での開発や頻繁な変更が発生する環境では、自動テストによって迅速に品質を保証し続けられるメリットは大きいものなのだろうと思いました。

以上で今回の話をおわります。
ありがとうございました。

新入社員ブログ 佐藤[一年を振り返って]

2025年4月入社の佐藤です。

入社してから気づけば一年が経ちました。プログラミング初心者としてスタートした私にとって、この一年は学びと挑戦の連続であったと改めて感じています。

プログラミング研修のスタート

入社後すぐの二カ月間は、外部でのプログラミング研修に参加しました。右も左もわからない状態からのスタートでしたが、基礎文法や簡単なサイト開発まで一通り経験することで、「エンジニアとして働くイメージ」を持つことができました。

特に苦労したのは、コードが思った通りに動かない時の原因追及です。初めはどこを見ればいいのかすらわからず、ひとつのエラーに長く悩んでしまうこともありました。それでも、講師の方々や他社の生徒の方々の助けを借りながら、徐々に理解が深まり、”できない”が”できる”に変わる喜びをたくさん感じられた期間でした。

実務を通して感じたこと

配属後は、実務の業務にかかわる中で、研修とは違う難しさに直面しました。

自分で調べて判断する場面が増えたこと

研修では丁寧にステップを教えてもらいましたが、実務ではまず自分で調べ、考え、整理することが求められます。わからない点を言語化することの難しさを何度も実感しました。

作業にかかる時間の予想が難しいこと

実際にやってみると想定外のところで時間がかかることも多く、最初は見積もりがうまくできませんでした。最近は作業前にポイントを整理することで、少しずつ予想が立てられるようになってきました。

説明や相談の仕方

状況を要点をまとめて簡潔に伝えることが難しく、説明に時間がかかってしまうこともありました。自分の中で情報を整理してから話す大切さを痛感した場面が多かったです。

こうした難しさに向き合う中で、少しずつではありますが仕事の進め方がつかめてきたと感じています。

フォローアップ研修

一年間の中で、タイムマネジメント、ロジカルシンキング、ホウレンソウ、ビジネス基礎などを学ぶフォローアップ研修にも参加しました。これらの研修は、日々の業務で感じていた自分の課題を整理し、改善のヒントを見つける貴重な機会となりました。研修での学びが、実務でのつまずきを消してくれた実感があります。

この一年を振り返って

改めて振り返ると、プログラミング初心者として入社した私にとって、周りの支えがなければ乗り越えられなかった場面が多くありました。困ったときに相談に乗ってくださる先輩方や、気兼ねなく話し合える同期の存在に助けられた一年でした。

まだまだ学ぶことは多いですが、来年は教えてもらうだけでなく、自分から動き、会社に貢献できる存在になることを目標に、さらに成長していきたいと思います。

新入社員ブログ 斎藤03[Form Requestについて]

25年度入社の斎藤です。

 今回は、Laravelのバリデーション機能であるForm Requestについて、概要を簡単にまとめ、webアプリケーションへの具体的な導入方法について説明しようと思います。

Form Requestとは

 FormRequestとはLaravelの機能の一つで、フォームから送られてくるデータのバリデーション(検証)を専用のクラスで管理することができます。Form Requestには以下のメソッドが標準機能として存在します。

authrizeメソッド
バリデーションを行う前に、リクエストが認可(オーソライゼイション)されるかどうかを決定します。
return true : バリデーションに処理が進む
return false : バリデーションを行わず、403 Forbiddenを返しリクエストが拒否される

rulesメソッド
フォームデータに対する検証(バリデーション)ルールを定義します。
バリデーションが通らなければ、デフォルトでは直前の画面にリダイレクトされます。
バリデーションルール記述方法 : [ ‘form要素名’=>’ルール1|ルール2…’ ]
※ルール同士は | 記号で繋げる。また、初めのルールと最後のルールを ‘ 記号で囲む

FormRequestクラスの作成

 Larvelプロジェクトフォルダにて、以下のコマンドでFormRequestクラスを継承した子クラス(今回の例ではSampleRequest)を作成します。
※○○Requestという名称にする
※ディレクトリで区切りたい場合は、クラス名指定を”ディレクトリ名/SampleRequest”とすればよい

以下のような、app/Http/Requests/SampleRequest.phpが作成されます。

今回の例では、SampleRequest内のauthrizeメソッド、rulesメソッドに対して以下のように設定します。

1.authrizeメソッドのリターンを常にtrueに変更
→リクエストが常に認可される

2.rulesメソッドにバリデーションルールを追加
フォームデータに対して以下の内容を検証する
$name : 入力必須、最大20文字
$tel : 入力任意、ハイフン区切りの電話番号形式
$email : 入力必須、メールアドレス形式
$body : 入力必須、最大1000文字

FormRequestバリデーションの実行

 以下では、フォームデータを受け取るコントローラのメソッドを用意し、FormRequestの子クラスであるSampleRequestを依存性注入することで、バリデーションを機能させます。

例として、以下のようなコントローラ(SampleController.php)を用意する
indexメソッド : Sample.indexビュー を表示
postメソッド : formリクエストを受け取る処理

このコントローラに以下の内容を設定することで、postメソッドにバリデーションを適応させる
1.use を用いて app/Http/Requests/SampleRequest を参照する
2.postメソッドの引数部分にSampleRequest $reruest を記述する(依存性注入)

この設定によってpostメソッドでは、SampleRequestで設定したバリデーションを通過したフォームデータのみを受け取ることができるようになります。

最後に

 今回、LaravelのFormRequestについて学んだことで、バリデーション処理を簡単に実装できることを知りました。
 特に便利だと感じた点は、多様なバリデーションルールが初めから用意されている点です。自分で複雑な検証ロジックを書く必要がなく、フォームデータの種類ごとにルールを定義するだけで適切なバリデーションが実行される点は、開発効率を大きく向上させると感じました。

今回の話は以上です。
ありがとうございました。

新入社員ブログ 斎藤02[CSRFについて]

25年度入社の斎藤です。

 今回は、Webアプリケーションに対する代表的な攻撃手法であるCSRF(クロスサイトリクエストフォージェリ)について、概要を簡単にまとめ、CSRF攻撃に対する一般的な対策とLaravelでどのように対策が行われているのかについて説明しようと思います。

CSRFとは

 CSRF(クロスサイトリクエストフォージェリー)は、Webアプリでログイン状態を保持している利用者に、ユーザーの意図しない不正なリクエストを送信させる攻撃手法です。
 正規のリクエスト方法とは異なるリクエストが受け入れられてしまうようなwebアプリの脆弱性が存在する場合に被害にあう可能性があります。
以下に具体的なCSRF攻撃手法の被害までの基本的な流れを銀行webアプリを例に説明します。

【前提条件】
・正規の銀行webサイト(例:https://bank.com)が存在し、送金機能をもつ
・CSRF対策(CSRFトークン)が実装されておらず脆弱性が存在する
※CSRFトークンについては後述

ステップ1:ユーザーが正規サイトにログイン
ユーザーが銀行サイト(bank.com)に正しい方法でログインします。
この際、Cookieが保存され、bank.comへのリクエスト時にはユーザーを識別するために自動的に送信されます。

ステップ2:攻撃者が作成した不正なサイトにユーザーがアクセスする
以下のような方法で不正なサイトにアクセスさせます。
・メールに記載されたリンク
・SNSの広告クリック
・掲示板に貼られたリンク
・他のサイトに埋め込まれた広告
など

ステップ3:不正なサイトのスクリプトが自動実行される

以下のフォームでは、正規の銀行webサイトに対して、攻撃者の口座(to_account)と送金金額(amount)を指定しています。

CSRF対策

 主なCSRF対策方法として、CSRFトークンを使用することが挙げられます。CSRFトークンは正規のページを表示したときにだけ発行される予測不可能なランダムな値です。
 このランダムな値をサーバーが生成してHTMLのFormに埋め込むことで、Form送信時にFormデータに合わせてCSRFトークンをserverへ送信し、フォームの正当性を担保することができます。
※CSRF攻撃では攻撃者はトークンを読み取れません

Laravel(Blade)でのCSRF対策
フォームタグ内に @CSRF を記述することで、Laravelが自動的にフォームに対してCSRFトークンを埋め込んでくれます。

※web.php(ルーティングファイル)では、@CSRFの付与されていないPOST/PUT/PATCH/DELETEリクエスト はエラーで弾かれるようになっています

jQueryのAjax通信でのCSRF対策
Ajax通信でのリクエストにもCSRFトークンを埋め込むことができます。
まず以下のようにBladeのheadタグ内にmataタグを用いてCSRFトークンを埋め込みます。

次にJavaScriptのjQuery.ajaxSetupメソッドに以下の記述を追加することで、metaタグからCSRFトークンを取得して、Ajaxリクエストに含めることができます。
※$.ajaxSetupはajax通信に関連するデフォルト値を変更するメソッド

最後に

 これまで、セキュリティ攻撃といえば不正なサイトに誘導する、webサイト自体に対して悪意ある改変を行うといったイメージを持っていました。
 CSRF攻撃はそれとは全く異なるアプローチで、攻撃者が自分のサイトから正規サイトへリクエストを送信し、ブラウザが自動的にCookieを付与してしまうことで、ユーザーの意図しない操作が実行されてしまうという「正規のフォーム外から攻撃する」という発想は、自分にとって全く考えたことのない視点であったので、非常に興味深く感じました。

今回の話は以上です。
ありがとうございました。

参考

安全なウェブサイトの作り方 – 1.6 CSRF(クロスサイト・リクエスト・フォージェリ)https://www.ipa.go.jp/security/vuln/websecurity/csrf.html

Readouble Laravel 9.x CSRF保護
https://readouble.com/laravel/9.x/ja/csrf.html

「CSRFって美味しいの?」←ハンズオンで実装して理解してみたhttps://qiita.com/Naughty1029/items/c606d4f12e994b46ba58