VirtualBoxを用いてLinux(Ubuntu)環境を作成しました

2024年4月に入社した吉岡です。

社内研修で登録フォームの作成に取り組んできましたが、開発環境の構築を行う上でLinuxについての知識や触れる機会が不足していることを強く感じました。Linuxに触れる機会を増やすために、VirtualBoxの仮想化技術を用いてLinux(Ubuntu)環境の構築しました。自分で実際に行った手順をブログにまとめました。

・使用したもの

Windows 11 Pro : 23H2

Oracle VM VirtualBox : 7.0.22 

Ubuntu: Ubuntu Desktop : 24.04.1 LTS

VirtualBoxインストール手順

1. Oracle VM VirtualBoxマネージャーのインストーラーをダウンロードする

Oracle VM VirtualBox – ダウンロード| Oracle Technology Network | オラクル | Oracle 日本

2. インストーラーを実行する

3.セットアップ画面が表示されるので「Next >」を押下する

4. カスタムセットアップ画面でインストールする機能とインストールするディレクトリを選択し、「Next >」を押下する

5. 一時的にネットワークから切り離される警告が表示されるので、「Next >」を押下する

6. 4でVirtualBox Python Supportをインストールする機能に含めた場合、Pythonとpywin32をインストールしていないとインストールするかどうかの確認文が表示される。

Pythonとpywin32インストールする場合は「Yes」を押下し、インストールしない場合は「No」を押下する。

*VirtualBox Python Supportは、APIでVirtualBoxを制御する機能

7. カスタムセットアップ画面でオプション機能を選択し、「Next >」を押下する。

8. 確認画面が表示されるので、現在までのセットアップでよい場合は「Install」を押下し、セットアップを変更したい場合は変更したい場所まで「Back >」を押下し変更する。

9. インストール完了画面でOracle VM VirtualBoxを起動するかにチェック入れて、「Finish」を押下する

10. Oracle VM VirtualBoxマネージャーが起動できることを確認する

〇仮想マシンを作成手順

1. 任意のISOイメージをダウンロードする。

以下の例では、Ubuntu Desktop 24.04.1 LTS を用いて説明します。

Ubuntuを入手する | Ubuntu | Ubuntu

2. ISOイメージがダウンロードできたことを確認する

3. Oracle VM VirtualBoxを起動する

4. 新規作成を選択する

5. 仮想マシン名を入力・タイプでLinuxを選択・バージョンでUbuntu(64bit)を選択する。「自動インストールをしない」を選択し、「次へ(N)」を押下する。

6. 仮想マシンのメインメモリとプロセッサー数を選択し、「EFIを有効にする」を選択し、「次へ(N)」を押下する。

*以下の例ではUbuntu Desktop 24.04.1 LTSの推奨システムである、メインメモリ4G(2096MB)とデュアルコア以上(プロセッサ数2つ以上)に設定します。

8. 仮想マシンの仮想ハードディスクのセットアップ方法を3つから選択する。

(1) 新規に仮想ハードディスクファイルを作成する場合

「仮想ハードディスクを作成する(C)」を選択し、ハードディスク容量を選択し、事前割り当てを行うか否かを選択する。

(2) 既存の仮想ハードディスクファイルを追加する場合

「すでにあるハードディスクファイルを使用する(S)」を選択し、追加する仮想ハードディスクファイルを選択する。

(3) 仮想ハードディスクファイルを追加しない場合

「仮想ハードディスクを使用しない(D)」を選択する。仮想ハードディスク設定を選択したら「次へ(N)」を選択する。

*以下の例ではUbuntu Desktop 24.04.1 LTSの推奨システムである、空きハードドライブディスク25GB以上に設定します。

9. 仮想マシンの設定の要約画面が表示されるので、このまま作成する場合は「完了(F)」を押下し、セットアップを変更したい場合は変更したい場所まで「戻る(B)」を押下し変更する。仮想マシンの作成をキャンセルしたい場合は「キャンセル(C)」を押下する。

10. 作成された仮想マシンが作成されたことを確認する。

仮想マシンの起動手順

1. 作成された仮想マシンを選択し、「起動(T)」を押下する。

2. メニュー画面が表示されるので「Try to Install Ubuntu」を押下し、インストール完了まで待つ。

3. インストール完了後、中央下部のアイコンを押下する。

4. 使用言語を選択し、「次」を押下する。

5. Ubuntuのアクセシビリティを設定し、「次」を押下する。

6. キーボードのレイアウトを選択し、「次」を押下する。

7. インターネットの接続法を選択し、「次」を押下する。

8. 「Ubuntuをインストール」を選択し、「次」を押下する。

9. 「対話式インストール」を選択し、「次」を押下する。

10. 開始時にインストールするアプリケーションを選択し、「次」を押下する。

11. コンピュータを最適化に関するソフトウェアをダウンロードする場合は選択し、「次」を押下する。

12. Ubuntuをインストールするディスクのセットアップ方法を選択し、「次」を押下する。

13. Ubuntuのアカウント名・コンピュータ名・ユーザー名・パスワードを入力する。

14. ログイン時にパスワードの有無とアクティブディレクトリの使用の有無を選択し、「次」を押下する。

15. タイムゾーンを選択し、「次」を押下する。

16. 確認画面が表示されるので、現在までのセットアップでよい場合は「インストール」を押下し、セットアップを変更したい場合は変更したい場所まで「戻る」を押下し変更する。

17. インストールが完了するまで待つ。

18. インストール完了後、「今すぐ再起動」を押下する。

19. PCのEnterボタンを押下する。

20. 作成したユーザー名を選択し、パスワードを入力し、PCのEnterボタンを押下する。

21. ログインに成功すると追加のセットアップ画面が表示されるので、「次へ(N)」を押下する。

22. Ubuntu Proを適用するか否か選択し、「次へ(N)」を押下する。

23. Ubuntuのシステムデータを共有するかどうか選択し、「次へ(N)」を押下する。

24. アプリケーションを追加する場合はアプリセンターを押下して任意のアプリケーションを導入し、追加しない場合は「完了(F)」を押下する。

25. 追加のセットアップが完了すると、ホーム画面が表示される。

・参考

Oracle VM VirtualBox User Guide for Release 7.0

Ubuntu | Ubuntu

(Oracle VM VirtualBox – ダウンロード| Oracle Technology Network | オラクル | Oracle 日本)

2024年 新入社員ブログ 高田03 [jQuery UI カレンダー機能実装]

こんにちは、2024年4月に入社した高田です。
7月から社内研修で、
・フレームワークを使用しない会員登録フォーム
・フレームワーク(Laravel)を使用した会員登録フォーム
の実装を行ってきました。
どちらの会員登録フォームも会員登録時の入力項目は同じですが、
フレームワークを使用しない会員登録フォームでは、生年月日をinput要素のtype=”date”入力型で実装し、Laravelを使用した会員登録フォームでは、デザイン性・カスタマイズ性を重視しjQuery UIのカレンダーで実装しました。

2つの方法で生年月日のフォームを実装してみて、
jQuery UIを使用したカレンダーは、input要素のtype=”date”入力型のカレンダーと比べ、
・高度なカスタマイズ性
・ローカライズ対応
といった点で優れていると感じました。

特にカレンダーの表示に関するオプションは豊富で、細かな設定ができると知っておくだけでも設計・実装の幅が広がると感じました。
そこで今回は、jQuery UIを使用したカレンダーの導入方法と実装方法について紹介したいと思います。
私が実際に作成したものがこちらになります。

画像1 生年月日選択中カレンダー表示

画像2 生年月日選択後

年月日のテキストボックスを選択するとカレンダーが表示されます(画像1)。
カレンダー上の日付を押下するとテキストボックスに年月日が入ります(画像2)。
カレンダーは記事作成日時である今日(2024/12/06)までの日付が選択できるようになっています。

[実装方法]

1. jQuery UIをダウンロード

jQuery UIを使用するためには、jQuery UIとそれに依存するjQuery自体を利用可能な状態にする必要があります。jQueryとjQuery UIには、CDN形式とダウンロード形式の2種類の利用方法があります。
CDN形式は、提供元のサーバーからライブラリを直接読み込む方法で、設定が簡単というメリットがあります。ただし、提供元のサービスが停止した場合に影響を受けるリスクがあります。
ダウンロード形式は、ライブラリをローカル環境に保存して利用する方法で、外部サービスに依存せず安定して利用できるという安心感があります。
今回は安定性を重視し、ダウンロード形式を選びました。

実際に公式サイトよりjQueryjQuery UIそれぞれダウンロードしました。

必要なファイルをフォルダに配置し、それらを読み込む設定を行います。LaravelのBladeテンプレートでは、ファイルのパスを指定する際にasset関数を使用します。Laravelのasset関数は、アプリケーションのpublicディレクトリを基準としたパスを生成するため、プロジェクト内でのファイル管理が簡単になります。以下のように配置しました。

これで、jQuery 、jQuery UIを使用する準備が完了しました。

参考: 【初心者向け】jQueryはじめの一歩 #JavaScript – Qiita

2. inputタグへの設定

ダウンロードが完了後、jQuery UIの日本語リファレンス(Datepicker | jQuery UI 1.10 日本語リファレンス | js STUDIO)を参考にしながら、「年・月メニュー表示」のカレンダーを実装していきます。リファレンスの「年・月メニュー表示」のソースコードは以下のようになっています。

HTMLでは、<input>タグにid=”datepicker”が指定されており、このidを基にjQuery UIのdatepicker機能を適用してカレンダーを表示します。jQueryでは、指定したidを用いて要素を選択し、その要素に対してdatepickerメソッドを適用することで、簡単にカレンダー機能を追加できます。また、オプションを設定することで、月や年を選択できるプルダウンメニューを表示し、カレンダーの挙動を柔軟にカスタマイズすることが可能です。なお、idは任意の値に変更でき、<script>タグ部分はそのまま利用することで簡単にカレンダーを作成することができます。以下に実際のコード例を示します。

この状態で画面を見ると、以下の画像のように年と月をドロップダウンで選択できるカレンダーが表示されます。

この状態でもカレンダーは十分に機能し、日付を選択することができます。しかし、さらに使いやすくするためにいくつかのカスタマイズを行います。

3. 使いやすいようにカスタマイズ

ステップ2で実装したカレンダーには、以下の2つの課題があります。
・月や曜日が日本語表記ではない
・生年月日用のカレンダーにも関わらず、今日以降の日付が選択できる
これらの課題を解決していきます。

・月や曜日が日本語表記ではない

datepickerの日本語化データはGitHubで利用できます。
下記のページを開いて(datepicker-ja.js)ダウンロードします。

GitHub:  jquery-ui/ui/i18n at main · jquery/jquery-ui · GitHub

ダウンロード後、必要なファイルをフォルダに配置し、ファイルで読み込みを行います。

これだけで日本語化することができます。

・生年月日用のカレンダーにも関わらず、今日以降の日付が選択できる

この問題はオプションを設定することで解決することができます。JavaScriptで日付と年を取得し、それを基に maxDate オプションで選択可能な最大日付を今日に設定を行います。また、年の範囲も1900年から現在の年までに制限します。

続いてyearRange オプションを使って1900年から2024年(今年)まで選択可能状態に、maxDate オプションで選択可能な最大日付を今日に設定を行います。
以下が実際のコードになります。

JavaScriptのテンプレートリテラルを使用し${}を使って変数や式を埋め込むことで、取得したcurrentYearを範囲指定に利用しています。この方法により、yearRangeオプションが常に動的に現在の年に対応し、毎年手動で更新する必要がなくなります。

さらに、maxDate オプションでtoday を設定することで、カレンダー上で今日以降の日付が選択できなくなります。以下の画像は2024/12/06に実装・確認したもので、2024/12/07以降の日付は選択不可になっていることが分かります。

[まとめ]

jQuery UIを使うことで、手間をかけずに高機能なカレンダーを実装できたのは非常に良かったです。使い方がシンプルで、公式ドキュメントや日本語リファレンスも分かりやすく、初めて触れる初心者でも短時間で機能を実装できる点が優れていると感じました。また、柔軟なカスタマイズが可能であり、要件に応じた細かい調整がしやすいのも魅力です。例えば、カレンダーの日本語対応や選択可能な日付の範囲指定など、よくあるカレンダーの仕様にも簡単に対応できました。今後、実装する要件に応じて適切なライブラリやフレームワークを選択し、それを効率的に活用できるスキルを身につけていきたいです。

2024年 新入社員ブログ 高田02 [ログイン/ログアウト機能実装]

こんにちは、2024年4月入社の高田です。
第1回目の記事で会員登録機能を紹介しました。
今回の記事では前回の記事の延長としてログイン/ログアウト機能について紹介します。

ログイン機能

ログイン機能の実装は今回始めて行いました。普段は意識せずに使っていますが、実装者の立場で改めて考えてみると、どのようにしてログイン機能が実現されているか不明でしたので今回一から調べました。色々なwebサイトを参考に実装し最終的に以下のようなステップで実装を行いました。

1. メールアドレス、パスワード入力必須チェック
2. メールアドレスでのデータベース照会
3. パスワード認証
4. 認証成功時の処理

簡単にではありますが、ここからは上記の各ステップについて順に説明していきます。

1. メールアドレス、パスワード入力必須チェック

ログイン画面でメールアドレス、パスワードを入力し、「ログイン」ボタンを押下すると認証処理が始まります。この際、すべての項目が入力されているか確認し、未入力の場合は以下の画像のようなエラーメッセージが表示されます。

このように必要な情報が揃わない場合、次のステップには進めません。

2. メールアドレスでのデータベース照会

メールアドレスとパスワードの入力必須チェックが完了すると、入力されたメールアドレスを基にデータベースを参照し、該当するユーザーを探します。データベースには登録済みのユーザー情報が保存されており、入力されたメールアドレスと一致するユーザーが見つかった場合、そのユーザーのハッシュ化(※1)されたパスワードを取得します。このパスワードを用いて、次のステップであるパスワード照合に進みます。

(※1)ハッシュ化とは?
ハッシュ化とは、ハッシュ関数によって文字列を置換して、元の文字を推測できなくすることです。ハッシュ関数を用いてsaltと呼ばれるランダムな値をハッシュする値に追加することで、同じパスワードでも異なるハッシュ値が生成されます。データベースに保存されているパスワードはハッシュ化して保存されています。

ハッシュ化の例:
・パスワード:
!X9v#4hT8@pQ7wZ&2024

・ハッシュ値:f3f32592e1483974c378f46b4ab91500199b83b168ec87ed76ebdd66efe83452

※ 上記のようにハッシュ化されたパスワードをデータベースに保存します。

ハッシュ化の特性と利点:
ハッシュ化は一方向の変換であり、一度ハッシュ化されたデータを元に戻すことは極めて困難です。この特性を利用し、データベースに保存するパスワードをハッシュ化しておくことで、万が一データベースが攻撃されても、パスワードを直接利用されるリスクを大幅に減らすことができます。

参考: PHP: パスワードのハッシュ – Manual

以上より、ハッシュ化はパスワードを管理するための重要なセキュリティ対策となります。

3. パスワード認証

パスワード認証では、データベースに保存されているハッシュ化されたパスワードと、ユーザーが入力したパスワードが一致するかを確認します。データベースに保存されているユーザーのハッシュ値からsalt値を抽出します。ユーザーが入力したパスワードと抽出したsalt値を使用して、新たなハッシュ値を生成し、新たに生成したハッシュ値と、データベースから取得したハッシュ値を比較します。一致すればパスワード認証が成功します。認証に失敗した場合、パスワードを空にして「メールアドレスまたはパスワードが一致しません」というエラーメッセージをログイン画面上に表示します。セキュリティの観点から、メールアドレスが正しいかどうかを利用者に知らせないようにするため、「メールアドレスまたはパスワードが一致しません」というメッセージにしています。以下の画像のように「メールアドレスまたはパスワードが一致しません」というメッセージを表示させます。

4. 認証成功時の処理

認証成功後、サーバー側とブラウザ側でそれぞれ以下の処理を行います。

[サーバー側の処理]

1. セッション情報の保存
サーバーは、ログインしたユーザーのID、名前、メールアドレスなどの必要な情報をセッションに保存します。これにより、ユーザーのログイン状態をサーバー上で管理します。セッション情報はサーバー側に安全に保存され、外部から直接アクセスすることはできません。

2. セッションIDの発行
サーバーは、ログイン状態を識別するための一意のセッションIDを発行します。このセッションIDは、サーバー内でセッション情報に紐付けられています。

3. ログイン後画面へのリダイレクト
認証成功後、ユーザーは検索画面などのログイン後画面にリダイレクトされます。


[ブラウザ側の処理]

1. セッションIDの保存
サーバーが発行したセッションIDは、ブラウザがCookieとして保存します。このCookieは、ブラウザ内に自動的に管理され、サーバーとクライアントのやり取りに利用されます。

2. セッションIDの送信
ブラウザは、保存したセッションIDをサーバーへのリクエストに自動的に添付します。この仕組みによって、サーバーはセッションIDを基にユーザーを識別し、ログイン状態を維持します。

参考: PHPでセッションを使ったログインページを作ってみる|やまでぃーのブログ

以上がログイン機能についての説明でした。

ログアウト機能

続けてログアウト機能について説明します。
ログアウトは、ログイン状態でのみ行うことができます。
ログアウト処理は、以下のステップで進められます。

1. サーバー側のセッション変数の初期化
2. ブラウザ側のセッションIDの削除
3. サーバー側のセッションIDの無効化

各ステップの詳細は以下をご覧ください。

1. サーバー側のセッション変数の初期化
セッション変数の全データを空にし、セッション情報をリセットします。これにより、セッション変数が初期化され、ユーザー情報などのセッションデータが破棄されます。

2. ブラウザ側のセッションID削除
クライアントのブラウザ側にCookieとして記録されているセッションIDの破棄を行います。セッション管理にCookieを使用している場合はブラウザ側のCookieを削除しておかないとセッションIDが残ってしまいセキュリティ上よくありません。(実装段階では、調べが行き届いておらずブラウザ側でのセッションID削除は行いませんでした。)

3. サーバー側のセッションIDの無効化
セッション自体を破棄し、セッションIDも無効化して完全なログアウト状態にします。セッションの破棄が完了後、ログイン前の画面にリダイレクトします。今回の場合、以下の画像のようにトップ画面にリダイレクトします。

以上がログアウト機能についての説明でした。

参考:
PHP: session_destroy – Manual
PHPでセッションを完全に破棄する方法 – プログラマはサイコロを振らない

まとめ

ログイン/ログアウト機能を実装する際に、セッションやCookieの仕組みについて深く学ぶことができました。例えば、ChromeでAmazonにログインした後、EdgeでAmazonのURL(https://www.amazon.co.jp/)にアクセスした場合にログイン状態が維持されるのか、また、Chromeの別タブで同じURLを開いた場合にログイン状態が共有されるのかを検証しました。この検証を通じて、セッションやCookieがブラウザごと、またはタブごとにどのように扱われるかを具体的に確認しました。その結果、ログイン状態がどのように管理されているのかについて理解が深まりました。
今回学んだ知識を活かし、次はPHPフレームワークであるLaravelを使った実装に取り組んでいきたいと思います。Laravelでは、認証機能やセッション管理に便利な仕組みが既に用意されており、活用することでより効率的かつ安全なログイン/ログアウト機能を実装できるようなので、実装方法をしっかり学習したいと思います。将来的に、ユーザーに安心して使ってもらえるシステム構築ができるよう引き続き学習していきます。

2024年 新入社員ブログ 高田01 [PHP版会員登録機能実装] 

こんにちは、2024年4月入社の高田です。
入社から半年が経過しました。この半年間は外部研修、内部研修を受けていました。

外部研修では、泉岳寺のオフィスを離れ新宿のビルで他社の受講生の方々と一緒にITの基礎知識やHTML、CSS、JavaScript、PHP、Laravelを学びました。最終的にチームで旅館予約システムを作成し発表を行いました。私はITに関しては未経験でしたが、分かりやすく丁寧に教えていただきとても有意義な時間を過ごすことができました。

内部研修では、泉岳寺のオフィスに戻りSQLやPHP、Laravelを使用した会員登録フォームを作成しています。外部研修で学んだ知識はもちろんのこと、実務で欠かせない技術を少し盛り込みより実務に近い研修です。

今回は内部研修の一環としてPHPを使用し作成した会員登録フォームの会員登録機能について紹介します。会員登録フォームは以下の5つの機能で構成されています。

会員登録機能
ログイン/ログアウト機能
会員一覧表示機能
会員情報更新機能
会員削除機能

今回は会員登録機能について説明していきます。
会員登録機能を実装するために以下の3つの画面を作成しました。

入力画面
確認画面
完了画面

これら3つの画面を通して、ユーザーが情報を入力し、確認・登録まで行います。
各画面について詳細を説明します。

入力画面

ユーザーが名前、メールアドレス、パスワードなどを入力するための入力画面です。 ユーザーがフォームに必要な情報をすべて入力し、POSTで確認画面に送信するための「確認」ボタンが用意されています。都道府県、性別についてはDBのテーブルから参照し、表示しています。また、確認ボタンを押下した際、入力値の保持を行いますが、パスワードに関してはセキュリティの関係上入力値を保持しないようにしています。バリデーションチェックを実施し、入力欄に適切な値が入力されなかった場合はエラーメッセージを入力画面上に表示します。

例えば、郵便番号入力欄に数字以外の文字を入力し「確認」ボタンを押下するとエラーメッセージが表示し、確認画面に遷移しないようになっています。

全項目のバリデーションチェックを突破したときに初めて確認画面に入力値をPOST送信し、確認画面に遷移することができます。

確認画面

入力した情報を確認する確認画面です。入力画面で「確認」ボタンを押下すると、確認画面に遷移し、POST送信されたデータが画面上に表示されます。ただし、パスワードに関しては、セキュリティを考慮して画面に表示されないようにしています。また、パスワードは確認画面に遷移した時点でハッシュ化を行っているため開発者ツールを使用してもハッシュ化前のパスワード値は確認できないようにしています。

この画面では、誤った情報が入力されていないかをユーザー自身が確認できるようにし、修正が必要な場合は「入力画面へ戻る」ボタンを押下し、入力画面に戻ることも可能です。入力画面に戻ってきた際に、パスワード以外の入力値が保持されています。また、1から入力する必要がなく、修正個所とパスワードの入力で確認画面に遷移可能です。開発者ツールを使用し、確認画面に送信された値をバリデーションエラーになるような値に書き換えて、「登録」ボタンを押下すると入力画面に遷移してエラー項目にエラー文が表示します。修正が必要ない場合は、「登録」ボタンを押下し、登録処理を確認画面で行い登録が終えたら完了画面に遷移します。

完了画面

ユーザー登録が完了したことを通知する完了画面です。完了画面は、DBにユーザー情報を保存した後に表示されます。DBにユーザー情報登録が成功した場合は、完了メッセージとともにトップページに移動するためのリンクが表示されます。また、完了画面に遷移した段階で、未ログイン状態からログイン状態となりヘッダーにログインユーザー名が追加されます。

学んだこと

開発者ツールの使い方

サーバーに送信するデータを直前に書き換えることが可能です。
ブレークポイントを入れることで、JavaScriptの変数の中身を確認しながらデバック作業を行うことができます。

変数名の命名規則

誰が見てもわかるような変数名を命名する必要があります。
キャメルケースやスネークケースといった命名規則が存在します。
コードの読みやすさを向上させるため、まず『リーダブルコード』という書籍を読んでみようと思います。この本は、読み手にとって理解しやすいコードを書くためのガイドで、わかりやすい変数名の付け方など詳しく解説されています。

絵文字の保存方法

今回の会員登録機能は絵文字を保存できるようにします。
絵文字はUTF-8の通常のバージョン(utf8)ではサポートされないため、UTF-8の4バイト対応(utf8mb4)に設定する必要があります
MySQLの設定ファイルの一部修正や、DBとテーブル生成時にutf8mb4に対応するようにしておきます。

デバッグ方法

会員登録機能を実装していくとよくエラーが発生します。
エラーを解決するためにデバッグ作業を行います。
error_log() を使ったデバッグ方法は、コードの進行がどこで止まっているかPOSTの値が渡っているかなどを調べます。このデバッグ方法のおかげで調べても解決できないエラーを解決することができました。

セキュリティを考慮することの重要性

SQLインジェクション対策とクロスサイトスクリプティング(XSS)対策を行いました。
入力欄に悪意あるコードを埋め込み、それが実行されてしまうとテーブルにあるユーザー情報が削除されてしまいます。
入力欄に入力された悪意あるコードを無効化し、ただの文字列として認識させれば悪意あるコードは実行されません。

以上が会員登録機能についてでした。
現在、Laravel版の会員登録フォームの作成に取り掛かっております。
PHP版の会員登録フォームでは実装できなかったページネーション機能や郵便番号から住所自動入力機能などを追加し、内部研修の集大成としてスケジュールに気を付けつつPHP版で学んだことを生かしながら作成していきたいと思います。

ApacheHTTPServerでHTTP/2を動かすためにphp-fpmを導入した結果

こんにちは。22年度入社の中島です。

先日作業していた案件で、ローカル環境構築をした後、
VMとサーバー接続しようとした時の出来事

mpmファイルの設定が「prefork」だとHTTP/2が機能せず
mpmファイルの設定を「event」または「worker」にすると、Apacheが機能しないという状況になりました。


上記のエラーを解決するためにphp-fpmを導入し、mpmの設定を「event」または「worker」にしたところApacheが正常に起動しました。

php-fpmをインストール


/etc/httpd/conf.modules.d/00-mpm.confの設定を変更
今回は、workerを有効にしています。


/etc/httpd/conf/httpd.conf に設定を追加しました。
拡張子phpのファイルをApacheで処理する場合に、php-fpmを使うようにする設定として以下の内容を追加します。

Apacheの再起動し、ステータスを確認します。

Apacheが起動したら、phpファイルが正しく処理されることを確認します。
DocumentRootの直下にphpinfo.phpを公開フォルダに作成します。
中身は以下のようになってます。

これをブラウザで表示します。

正しく動作することを確認できました!

いかがでしたでしょうか。

HTTP/2を動かすためには、preforkでなくeventもしくはworkerで設定し、モジュール版phpでなくphp-fpmなどで動かす必要があるということがわかりました。

今後も業務で起こった出来事をブログにしていきたいと思います。

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

新入社員ブログ 中島05『Windowsのショートカットキー』

こんにちは。22年度入社の中島です。

作業を行っている時、ショートカットを使わず
マウスを使って作業することが多かったので
少しでも作業効率を上げるために、ショートカットキーを調べていました。
今回はWindowsのショートカットキーを紹介したいと思います。

・Ctrl+T(タブを開く)
開いているブラウザで新しいタブが開きます。

・Ctrl+W(アクティブなタブを閉じる)
使用しているタブを消します。連打注意

もし、作業中に必要なタブを消してしまった時いちいち検索し直したり、
履歴に行くなんて面倒ですよね?そんな時は

・Ctrl+Shift+T(閉じたブラウザの復元)
閉じた順番に閉じたタブが復元します。
こちらも連打注意

・Windows+V(クリップボード)
画面右下にクリップボードが開きます。
今回ブログを書くきっかけになったショートカットキーです。
個人的に一番役に立つと思います。

・PrtSc(画面をスクリーンショット)
画面全体をスクリーンショットします。
ですが、デュアルモニターなどを使っていると二画面一緒に撮れてしまいます。
そんな時はPrtSc+Altを使って、必要な画面をスクリーンショットしましょう。

・Windows+Shift+S(選択範囲をスクリーンショット)
範囲を選択してスクリーンショットします。Ctrl+Vでそのまま貼り付けも出来ますし、
クリップボード内にも保存されるので、そこからも操作できます。

・Windows+1~0(タスクバーのアプリの起動 )
タスクバーのアプリの起動します。(起動している場合はアプリが開く)

上の画像の場合、Windows+1でエクスプローラーが起動し、
Windows+5でchromeが開くといったものです。

いかがでしたか?
今回紹介したものはごく一部です。ショートカットに興味が湧いてきたのなら下のブログを見てみるまたは、一度ご自身で調べることをオススメします。
いい発見になると思います!

よく使うウィンドウズのショートカット (xchange.jp)

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

新入社員ブログ 山本慎太郎第6回

皆さんこんばんは!そろそろ、年度末ですね。学生の方は期末レポートに追われているといったところでしょうか?社会人になった私も年度末の提出物の期日が迫ってきています。(け、決して今までサボっていたということではないのです…)

ブログも第6回になりました。

https://blog-s.xchange.jp/archives/1888

https://blog-s.xchange.jp/archives/1844

https://blog-s.xchange.jp/archives/1814

https://blog-s.xchange.jp/archives/1788


過去のブログもよかったら見てね!


1~5回目は外部及び社内での研修のテーマでしたが、今回は業務から離れます。

今回は「会社近辺の散歩スポット」について書いていきましょう。

弊社は泉岳寺という場所にあるのですが、どこにあるのかあまりピンとこない人も多いのではないでしょうか?私は知人にどこで働いているの?と聞かれるとき、「泉岳寺」とは答えず「港区」と答えるようにしています。「港区」というと、「港区なんだ!?」という反応で、泉岳寺というと「どこ?」といったような反応をされます。(寺という文字が含まれてるので、ちょっと渋てくマニアックなイメージになってしまうのでしょうかね…)

さて、、泉岳寺とはどんなところか、昼休みに散歩してみました。

会社から3分ほど歩いたところに神社があります。たまに、お弁当を食べているサラリーマンの方が見受けられます。

少し歩くと、こんどはお寺です。立派な鐘がありました。

更に歩いていくと、またお寺がありました。築地本願寺っぽいですね。

更に更に歩いていくと、またまたお寺がありました。

地名にもなっている、泉岳寺というお寺でした。

たった十数分の散策で、寺社めぐりができてしまうのです。昼休みの数分で…!

どうやら、弊社の近くには寺社がたくさんあったようです!

ご利益がありそうです。

あっ、寺社だけではありませんよ。もう少し歩けば、レインボーブリッジがあるのです。仕事終わりに散歩できる距離です。

何もないようにみえて、実は何かある!というような泉岳寺でした。

今日はこの辺で!goodluck!!

新入社員ブログ 山本慎太郎第5回

あけましておめでとうございます!

正月はいかがお過ごしでしょうか?私は仕事を忘れゆっくりしていましたがあっという間に休みは過ぎていくものですね。。正月休みが終わってしまいましたが、ゴールデンウィークまで頑張っていきたいと思います

さて、ブログ第5回はOJT研修(実際の業務につきながらの研修)について記していきたいと思います!

4~5月は、外部での研修、6~8月は、社内での研修を行いました(前のブログでも書いたのでよかったら見てね)

9月からは今までの研修とは異なり、実際の業務に入りながらの研修になります。

私は某企業の基幹システムの保守、改修の案件に配属されることになりました。案件に入る前に、まず環境構築を行いました。

環境構築ってどんなことをするの?といいますと…簡単にいうと、基幹システムに接続する設定だったり、案件の他の開発者と開発環境をそろえたりといったことをします。数人で同じシステムを作るので、開発環境を他の人とそろえる必要があるのです。システムのソースコードや、データベースの構造などをそろえます。gitやvirtulbox、A5M2などのツールをインストールして接続設定して…と、システム開発に必要な環境を自分のパソコンに構築していくのです。

また、システムの仕様書を見てどんな機能があるかなども確認したりしました。

環境構築はマニュアルを見ながら行ったのですが、とにかく書いてあることが難しい…研修なので先輩社員に細かく教えてもらいながら環境構築進めていきましたが、それでもわからないことやできないことが山のように出てきます。時間がかかりながらも何とか環境構築を終えました。

そして初仕事を上司から頂き、いよいよ業務に着手!というところですが、これ以上はお話できないのです。(具体的な仕事内容は、秘密にしないといけないのです・・)

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

新入社員ブログ 中島03 『フォローアップ研修』

こんにちは。22年度入社の中島です。

2022年12月21日
私はフォローアップ研修として、文章力向上研修を受講しました。
今回は研修での学習したことを感想を踏まえて、三つにまとめました。

1、文章力向上研修で学んだこと
2、今回の研修を受けて業務で生かしたいこと
3、感想

1、文章力向上研修で学んだこと
-文章を書く上で重要なことは「何の目的で」「誰に」「何を」「どう伝えるのか」である
-伝えたいことを項目化、グループ化し核を決める
-文章を短く、簡潔にする
-段落、文末などを意識し文章をまとめる
-主語、述語を記載する、明確に分かりやすく
-PREP法を使用する(P:結論、R:理由、E:事例、P:結論)

2、今回の研修を受けて業務で生かしたいこと
今回の文章力向上研修では上記のように様々なことを学びました。その中で特に私が業務で生かしたいと思ったことは、PREP法を使ってビジネス文書を記載することです。PREP法を使用すると、自分で一から文章を考えて作成するより相手に明確に伝えたいことを伝えられるからです。
また、読み手に確実に伝えるべきことを伝えることが重要だと学びました。普段の業務では、先輩や上司に何かを伝える際に冗長な文章になってしまいがちです。今後は目的をしっかり決めて短い文章で伝えるようにします。

3、感想
今回の文章力向上研修を受けて、今までの私は文章を書く際に結論から書くことは意識していましたが、短い文章で書く、文末は一緒ではない方が良い、など細かいところは意識したことがありませんでした。今後の業務では今回習ったことを生かせるように、まずはPREP法で伝える、ということから始めようと思います。

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

2022新入社員ブログ山本慎太郎  第4回

皆さんこんにちは!

もう年末なのですね…気付けば、、街はイルミネーションの灯りで煌びやかです。私はもうすぐ23歳になるので、自分自身に灯りを付けたいですね。

さあ、今回のテーマはPHPとララベルの社内での学習についてです!

7月はPHP、8月はララベル(PHPのフレームワーク)の学習をしました。まだ暑い夏のことでした。

弊社では、PHPを使用したwebアプリ開発案件がいくつかあります。社内研修ではPHPの基礎的な扱い方を1か月かけて学習しました。
学習の課題として、PHPで簡単なアプリケーションを作成しました。機能は↓のような簡単なものです。

機能
・データ新規登録ページ
・登録データ一覧ページ
・登録データ検索機能
・削除機能
・登録データ編集機能

・データ新規登録ページ

入力フォームを作って、データベースに登録する機能を作成します。入力した値が、どのようにしてプログラムを通過しデータベースに入っていくのかを意識しながら作ります。また、不正な入力値がデータベースに登録されないようなセキュリティのことも考えます。

新規登録画面

・一覧表示

新規登録で作成したデータが、正しくページに一覧として出力されるようにプログラミングします。ページネーションという1ページに表示できる件数を設定する機能の実装がとても苦しかったのを覚えています…その分完成した時の快感が強いです!

・検索機能

登録したデータの中から、条件に一致するワードを検索したい!といった機能です。
ここで、6月に行ったSQLの学習が生きてくるのです。ここでも、検索欄に不正文字列の入力でエラーが起きないよう実装します。

検索、一覧表示画面です。非常に検索項目が多いです

・削除機能、編集機能

データの削除や、編集が行えるよう実装します。これも、SQLの知識が生きます。

不明点や、うまく実装できない点などは、先輩社員の力を借りながら、少しずつ完成させていきました。こうして、7月が終わり8月になります。

8月は、laravelに入ります。laravelとは簡単に言うと、PHPの複雑なコードをより簡単にするプログラムとかのひな形です。

laravelを用いて、7月と同じ機能のアプリケーションをまた1から作成します。同じ機能で同じPHPの言語ですが、書き方はだいぶ異なります。例えば、ページネーション

$countlist = $state->fetch(PDO::FETCH_ASSOC);

foreach ($countlist as $data) {

            $countnum = $data;

        }

if (!empty($_GET[‘page_id’]) === true) {

            $page_id = $_GET[‘page_id’];

        } elseif (empty($_GET[‘page_id’])) {

            $page_id = 1;

        }

$offnum = ($page_id – 1) * 10;

$max_page = ceil($countnum / MAX);

    if (empty($page_id)) {

        $now = 1;    } else {

        $now = $page_id;

    }for ($i = 1; $i <= $max_page; $i++) { if ($i == $now) {

            echo $now . ‘ ‘;

まだ、、続く….長いよ…

これをlaravelで書くと…

‘users’ => DB::table(‘users’)->paginate(10)

↑たった一行で!

みたいに、楽に、かつできることも多いというのが特徴なのです。

PHPとララベルの違いを味わいながらの8月でした。

そして、9月になり、OJT形式で実際の業務に入っていきます。

ということで、今回はここまでです。読んでいただきありがとうございます!

よいお年を…