2025年 新入社員ブログ 高田05 [ローカル環境構築の利点と感想]

こんにちは、2024年4月に入社した高田です。
社内研修で Laravel を使用して会員登録フォームを作成しました。その際、ローカル環境は Docker を用いましたが、別の方法でも環境構築を試してみたかったため、Vagrant を使って同じ構成のローカル環境を構築しました。
今回は、ローカル環境構築における利点と、DockerやVagrantを学んだ感想について紹介したいと思います。

ローカル環境構築の利点

1. プログラムの動作確認が手軽に行える

Laravel を使って開発を進めるには、PHP や Web サーバー(Apache など)が動作する環境が必要ですが、一般的なWindows PCにはPHP や Web サーバーはインストールされていません。作成したプログラムを動かすには別途Webサーバーを用意し、Webサーバーにプログラムファイルをアップロードする必要があります。
しかし、Webサーバー用のPCを新たに用意するのは場所や費用の問題もあるので難しい場合があります。このような課題は、ローカル環境を導入することで解決できます。
ローカル環境を導入すると、自分のPC がサーバーとして動作するような状態となるため、新たにWebサーバー用のPCを用意する必要がありません。
また、同一PC内でWebサーバーが動作する形となるため、設定次第でWebサーバーにプログラムファイルをアップロードする手間を省くことができます。
ローカル環境を導入することにより、修正や確認のサイクルが短縮され、プログラム開発効率が大幅に向上します。

2. ローカル環境構築を通じたインストールと設定の習得

ローカル環境を構築する過程で、以下のようなWebアプリケーションを動かすための各種ソフトウェアについて、インストール方法や設定方法を学ぶことができました。
・PHP
・Web サーバー(Apache)
・データベース
具体的には、PHP を Web サーバーと連携させる仕組みや、MySQL などのデータベースとアプリケーションを接続する方法を学びました。コマンドでインストールを行うため、コマンドの使用方法についても復習出来ました。

3. 実務での開発安定化

ローカル環境を持たず、1つの開発サーバー上のファイルを複数人で直接編集すると、以下のようなトラブルが発生することがあります。
・他人が編集していることに気付かずにファイルを上書きしてしまう可能性がある
・誰がどの変更を加えたのか把握しにくくなる
ローカル環境を構築することで、上記のようなトラブルを防ぐことができます。結果として、安定した開発が可能になります。

Docker・Vagrant を学んだ感想

1. Linux、ネットワークの知識が必須

Docker や Vagrant を学ぶ上で、Linux やネットワークに関する基礎知識は不可欠だと感じました。基礎知識があることで、環境構築の全体像を把握しやすくなり、作業を効率的に進められます。さらに、エラーが発生した際や情報を検索する際も、技術記事の内容をスムーズに理解できるようになります。
一方で、Linux やネットワークの知識が不足していると、設定やエラー対応に時間がかかり、調べた情報を十分に活用できず、環境構築が思うように進まないことがあります。

2. 初心者が使用する場合はVagrantの方が簡単

Vagrantを使った環境構築は、手順がシンプルで初心者でも取り組みやすいと感じました。特に、Vagrantfileの記述だけで仮想マシンを構築できる点が大きな利点です。
仮想環境を使う場合、ホストOS(自分のPC)と仮想環境(VagrantやDockerなど)の間でファイルを共有するための仕組みとして「マウント」があります。マウントを設定すると、ホスト側で編集したファイルが仮想環境内にも反映されるため、設定が重要です。
ただし、Vagrantでマウントを設定する際、意図したとおりに機能しないことが多く、調べながら試行錯誤する必要がありました。初心者にとっては設定の難しさがハードルになりやすいと感じました。
Dockerを使用する場合、Dockerfileに加えて複数のコンテナを管理するためのdocker-compose.ymlファイルも必要になります。コンテナの仕組みや設定ファイルの記述方法を理解する必要があり、環境構築の経験が少ない初心者にとっては難易度が高いと感じました。
環境構築のしやすさを考えると、Vagrantの方が初心者には導入しやすく、理解しやすいと感じました。

まとめ

今回は、ローカル環境構築の利点と、DockerやVagrantを学んで感じたことを紹介しました。社内研修用に作成したローカル環境ですが、今後は実務でも新たにローカル環境を構築する機会が増えると考えています。
実務では、単にローカル環境を構築するだけでなく、メンバー間での手順やローカル環境ファイルの共有方法、複数人で進める際の利点にも注目しながら活用していきたいと考えています。

2025年 新入社員ブログ 高田04 [郵便番号から住所自動入力機能]

こんにちは、2024年4月に入社した高田です。
社内研修の一環として、Laravelを使って会員登録フォームを作成しました。その中で、住所登録時に郵便番号から住所を自動入力する機能を実装することになり、対応方法をいくつか調べてみました。
調査の結果、いくつかの実装方法があることがわかりました。今回はその中から以下の2つの方法を選び、それぞれを実際に実装してみたので紹介したいと思います。

1. YubinBango.jsを使用する方法
2. Zipcloud APIを使用する方法

まず、実装の下準備として、郵便番号、市区町村、その他を入力するテキストボックス、および47都道府県を選択するプルダウンメニューを作成しました。以下にそのコードを記載します。

ブラウザで表示すると以下のようなフォームが表示されます。

方法1:YubinBango.js

YubinBango.jsは、郵便番号から住所を表示する機能を簡単に実装できるJavaScriptのライブラリです。使用方法は非常にシンプルで、指定されたclass属性をHTML要素に追加するだけで機能します。
実際に実装したコードは以下の通りです。

ライブラリを埋め込み、class属性を指定する事で実装することができました。
実際にブラウザで確認すると以下のように、郵便番号(例:1080073)を入力した段階で郵便番号以降の項目(都道府県、市区町村、その他)が自動入力されます。

方法2:Zipcloud API

Zipcloudは、日本郵便が提供する郵便番号検索APIです。入力された郵便番号に基づいて対応する住所情報(都道府県、市区町村、町域など)を取得するためのサービスです。無料で利用可能で、JSONP形式で住所データを取得できます。

以下のURLにアクセスしてください。

https://zipcloud.ibsnet.co.jp/api/search

ブラウザにはこのように表示されます。

続いて以下のURLにアクセスしてください。

https://zipcloud.ibsnet.co.jp/api/search?zipcode=7830060

先ほどの画面とは異なり、ブラウザには住所が表示されています。

「https://zipcloud.ibsnet.co.jp/api/search」は、APIにリクエストを送信するための特定のURLであり、エンドポイントと呼びます。クライアントは、エンドポイントに対してリクエストを送信します。リクエストはインターネットを通じて送られ、APIサーバーに届きます。リクエストを受け取ったAPIサーバーは、内容を解析し、必要なデータをデータベースから取得します。
APIサーバーは、取得したデータを整理し、JSON形式などでレスポンスを作成します。作成したレスポンスはクライアントに送られます。
クライアントは受け取ったデータを解析し、画面に表示します。

今回のように、エンドポイントに「?zipcode=7830060」というクエリパラメータ(リクエストに含まれる追加情報)を付け加えてリクエストを送信すると、郵便番号「7830060」に対応する住所データを取得できます。

Zipcloud APIを使用して、郵便番号から住所自動入力機能を作成すると以下のようなコードになります。

実装の流れは以下の4ステップで行われています。

1. 郵便番号の取得
ユーザーが郵便番号を入力すると、その値をjQueryで取得します。取得した郵便番号が7桁の時に次の処理が実行されます。

2. APIへのリクエスト
入力された郵便番号を基に、Zipcloud APIへリクエストを送信します。APIは指定した郵便番号に対応する住所データを返します。

3. レスポンスデータの解析
APIから返ってきたJSON形式のデータを解析し、都道府県、市区町村、その他の情報を取得します。

4. フォームへの値の反映
取得した住所データを、都道府県のプルダウンメニューや市区町村・その他の入力フィールドに設定します。

ZipCloud APIによる住所自動入力機能は、jQueryの基本的な構文の知識があれば実装可能です。

参考
郵便番号検索API – zipcloud
新卒エンジニアがWebAPIを超わかりやすく解説します #初心者 – Qiita
郵便番号の自動入力「YubinBango.js」の使い方と都道府県コードを使う方法 | 大阪のシステム開発なら 株式会社ウィズテクノロジー
【jQuery】郵便番号検索APIを使って住所を自動取得する(zipcloud) | eguweb(エグウェブ)
【Javascript】郵便番号から住所を自動入力する方法 #JavaScript – Qiita
【初心者向け】郵便番号で住所検索をする外部APIを叩く #JavaScript – Qiita
実践jQuery講座 Ajaxの実装方法 | Inoma Create

まとめ

2つの方法を実装しましたが、YubinBango.jsはとても実装が簡単でプログラミング初心者におすすめできます。Zipcloud APIはjQueryの知識が必須のため、jQueryの基本的な構造や書き方に慣れてから使う方がよいかもしれません。今後もAPIやライブラリをうまく使えるようにjQueryやAPIの仕組みなどしっかりと学んでいきたいと思います。

Docker Desktopを用いてLinux(Ubuntu)環境を作成しました。

こんにちは、2024年4月に入社した吉岡です。

Linuxの勉強のためVirtualBoxを用いた環境の構築を行ったことがありましたので、今回はDocker Desktopを用いてLinux(Ubuntu)環境構築を行いました。自分で実際に行った手順をブログにまとめました。

・使用したもの

Windows 11 Pro : 23H2
Docker Desktop 4.37.1 (178610)
Ubuntu 24.04.01 LTS

Docker Desktopインストール手順

1. 仮想化を有効にするために「Windowsの機能の有効化または無効化」を開き、「Linux用Windowsサブシステム」と「仮想化マシンプラットフォーム」を選択し、「ok」を押下する

2. 「Docker Desktop for Windows-86_64」をダウンロードする

Windows | Docker Docs

3. Docker DesktopInstaller.exeを起動する

4. デスクトップにショートカットを作成するか選択し、「OK」を押下する

5. インストールに成功したら「close」を押下する

6. Docker Desktopを起動する

7. サブスクリプションサービス同意画面で「accept」を押下する

8. DockerアカウントでサインインまたはDockerアカウントを作成する

9. Docker desktopにサインインすると、アンケート調査が表示されるので回答するまたは「skip」を押下する

10. Docker Desktopのホーム画面が表示されていることを確認する。

11. Windows Power Shellを開き、「docker version」と入力しEnterキーを押すとDockerのバージョン情報が表示されることを確認する。

12. Windows Power Shellを開き、「wsl -l -v」と入力しPCのEnterキーを押すとdocker-desktopが起動している。

仮想化コンテナの作成および実行手順

1. Windows Power Shellを開き、任意のディレクトリに移動する。

2. 任意のUbuntuのDocker imageを取得するために、「Copy」を押下しコマンドを取得する。

*以下の例では、Ubuntu 24.04 LTSを使用する。

ubuntu – Official Image | Docker Hub

3. Windows Power Shellでコピーしたコマンドを入力し、PCのEnterキーを押下し、UbuntuのDocker Imageをダウンロードする。

4. Windows Power shellで「docker images」と入力し、Enterキーを押下してでDocker Imageを取得できたことを確認する。

*Docker Desktopでも確認可能

5. コンテナを作成および実行するために「docker run -it -d –name 任意のコンテナ名 任意のDocker image名」を入力し、PCのEnterキーを押下する。

*以下の例では、コンテナ名「MyUbuntuContainer」、基となるDocker Image「ubuntu:24.04」

6. 「docker ps -a」と入力し、コンテナ作成および実行後を確認する。

*Docker Desktopでも確認可能

7. 実行したコンテナ内に入るために「docker exec -itコンテナ名 bash」と入力し、PCのEnterを押下する。

8. 動いているUbuntuのバージョンを確認するために「cat /etc/issue」と入力し、PCのEnterを押下する

9. コンテナ内部から抜け出すため、「exit」と入力し、PCのEnterキーを押下する。

10. 実行したコンテナの「docker stop コンテナ名」を入力し、コンテナを停止させる。

11. 「docker ps -a」と入力し、コンテナが停止していることを確認する。

*Docker Desktopでも確認可能

参考:

Windows | Docker Docs

ubuntu – Official Image | Docker Hub

LPIC試験について

こんにちは、2024年4月に入社した吉岡です。

私は社内研修で登録フォームの作成に取り組んできましたが、開発環境の構築を行う上でLinuxについての知識や触れる機会が不足していることを強く感じました。Linuxについての知識を体系的に深めるために、Linuxの試験であるLPIC-1 101試験(Ver5.0)の公式テキストに取り組みました。

今回の記事を通して、LPIC試験の概要とLPIC-1(101試験)の試験範囲や難易度および実際に学習した感想をお伝えします。

LPICとは

LPICは国際基準で認定されたLinux技術者認定資格であり、要求されるスキルレベルLPIC-1からLPIC-3までの3段階が設定されており、下位のレベルから受験していくことになります。ベンダー資格ではないのでLinuxの汎用的な知識について出題されます。

LinuCとの違い

Linucとは日本独自のLinux技術者認定資格であり、LPICをベースに日本市場で求められるスキルを基準に策定されています。要求されるスキルレベル1からレベル3、システムアーキテクチャの4段階が設定されています。

自分はまずLinuxの全体構造について知識を深めたかったので、LPICの方に取り組みました。

LPIC-1とは

LPICの最もやさしいとされる試験で、特にサーバーエンジニアやインフラエンジニアにとってメジャーな資格とされています。取得には101試験と102試験の2つを合格する必要があり、片方に合格してから5年以内にもう片方の試験を合格する必要があります。

LPIC-1(101)試験とは

試験時間は90分で、出題数は60問です。合格点は500点ですが、点数計算は正解率や問題の難易度によって1問の得点が決まるため、何問正解すれば合格できるかはテストの回によって変動します。

試験範囲は、システムアーキテクチャ、GNUとUnixコマンド、デバイス・Linuxファイルシステム・ファイルシステム階層標準です。102試験とは出題範囲が異なりますが、難易度としては同じくらいとされています。

勉強してみた感想

公式のテキストが500ページ近くあったのでとても大変でした。コツコツ勉強していき3,4か月掛けてテキストを一周したのですが、過去問を解いてみると知識があいまいなだったり抜けていたりするが箇所が多かったです。LPIC-1の資格取得はまだまだ遠いですが、学習前よりもLinuxに対しての親しみやすさを感じられようになったので取り組んでみてよかったです。また、Linucのレベル1だと仮想化やコンテナなどについても試験範囲になるそうなので、そちらについても勉強してみたいと思います。

参考:

LPI: 公式サイト

LPIC-1 Exam 101 学習テキスト

LPI :よくある質問

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)

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