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版で学んだことを生かしながら作成していきたいと思います。

Linux学習についてのまとめ 02 GNU/Linux

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

現在、私はLinuCの101試験に合格するためにLinuxの学習を進めています。特にGNUに関する内容を理解することが重要であると感じ、これらの知識をブログとしてまとめました。この記事を通じて、GNU/Linuxの基本的な歴史やリチャード・ストールマンの貢献、さらにはLinuxのテキストフィルタコマンドについて共有します。

1. GNUの歴史について

GNUは「GNU’s Not Unix!」の略で、Unix互換のオペレーティングシステムを開発するために1983年にリチャード・ストールマンによって開始されたプロジェクトです。当時、ほとんどのソフトウェアがプロプライエタリ(専用)であり、ソースコードが公開されていませんでした。ストールマンは、ソフトウェアの自由な使用、改変、再配布を可能にすることを目指してGNUプロジェクトを立ち上げました。

GNUプロジェクトの最も重要な成果の一つは、GPL(GNU General Public License)です。GPLは、フリーソフトウェアに特化したライセンスであり、ユーザーにソフトウェアの自由を保障します。このライセンスは、ソフトウェアを自由に使用し、改変し、再配布することを許可しますが、改変や再配布されたソフトウェアも同様にGPLの下で公開される必要があります。この仕組みを「コピーレフト」と呼びます。コピーレフトは、ソフトウェアの自由を保護するための強力な手段であり、オープンソースソフトウェアの普及に大きく寄与しました。

コピーレフトの理念は、ソフトウェアが自由であるべきという考え方に基づいており、ユーザーがソフトウェアを制限なく利用できるようにすることを目的としています。このため、GPLはフリーソフトウェア運動の基盤となり、オープンソースコミュニティにも大きな影響を与えました。

GNUプロジェクトは、Unixと同様の機能を持つ多くのソフトウェアを開発しました。これらのソフトウェアには、コンパイラ(GCC)、テキストエディタ(Emacs)、シェル(Bash)などが含まれます。これらのツールは、現在も多くのユーザーに利用され、Linuxを含むさまざまなオペレーティングシステムで使用されています。

2. リチャード・ストールマンについて

リチャード・ストールマンは、フリーソフトウェア運動の先駆者であり、GNUプロジェクトの創始者です。1985年にフリーソフトウェア財団を設立し、ソフトウェアの自由を擁護する活動を続けています。彼の主張は、ソフトウェアがユーザーに自由を与えるべきであり、そのためにはソースコードが自由にアクセスできる状態でなければならないというものです。ストールマンの理念は、多くのフリーソフトウェアのライセンス(例:GPL)に反映されており、今日のオープンソースコミュニティに大きな影響を与えています。

3. GNUから生まれたLinux

GNUプロジェクトは多くのツールを開発しましたが、オペレーティングシステムの核となるカーネルは開発されていませんでした。1991年、リーナス・トーバルズによってLinuxカーネルが発表されました。GNUツールとLinuxカーネルを組み合わせることで、現在の多くのGNU/Linuxシステムが形成されました。このように、LinuxはGNUプロジェクトと密接に関連していますが、GNUそのものとは別の存在です。

4. GNU/Linuxのテキストフィルタコマンド

GNUシステムの基本コンポーネントには、GCC(コンパイラ)、glibc(ライブラリ)、Coreutils(コマンド)、GDB(GNUデバッガ)、Bashシェルなどが含まれています。
Coreutils(GNU Core Utilities)の中でも特徴的なのが、テキストデータを加工するコマンド群になります。シェル上でこれらのコマンドを組み合わせることで強力なデータ処理が可能です。

これらのテキストフィルタコマンドは、データ処理や分析において非常に役立つツールであり、試験勉強の一環として理解を深めることで、実際の業務でも役に立つと思いました。
業務で使うシーンを想定しながら、今回はそのコマンドと例文の一部をまとめようと思います。

代表的なテキストフィルタコマンド
コマンド説明
grepテキスト検索ツールで、指定したパターンに一致する行を抽出します。
例: grep -i ’error’ application.log
application.logファイル内で ‘error’ (大文字小文字区別なし)に一致する行を検索して表示します。
sedストリームエディタで、テキストの置換や削除、挿入を行います。
例:sed ‘s/localhost/127.0.0.1/g’ /etc/hosts
ホスト名をIPアドレスに置き換えます。設定ファイルを一括して修正する際に役立ちます。
awkテキスト処理言語で、テキストのパターンマッチングと処理が可能です。
例:awk ‘$3 == “root” {print $1}’ /etc/passwd
/etc/passwdファイルからrootユーザーのユーザー名を抽出します。
sortテキストデータをソート(並べ替え)します。
例: sort -k3,3 -t, data.csv
CSVファイルの3列目(例: 売上データ)を基準にしてソートします。
uniq重複する行を削除します(通常はsortと組み合わせて使用されます)。
例: sort access.log | uniq -c
アクセスログの重複するエントリを集計し、一意のリクエスト数を数えることができます。
cutテキストの特定のフィールドを抽出します。
例: cut -d ‘:’ -f 1 /etc/passwd
/etc/passwdファイルからユーザー名のみを抽出します。
tr文字の変換や削除を行います。
例: echo ‘abc123’ | tr ‘a-z’ ‘A-Z’
出力結果の小文字を大文字に変換します。

これらのコマンドを使いこなすことで、テキストデータの効率的な処理と分析が可能になります。

おわりに

今回の記事では、LinuC101試験に向けての学習の一環として、GNU/Linuxの歴史やリチャード・ストールマンの貢献、そしてテキストフィルタコマンドについてまとめました。これらの知識を深めることで、Linuxシステムの理解がさらに深まったと感じています。特に、シェルスクリプトの作成や自動化されたデータ処理、システム管理業務において、これらのコマンドの組み合わせが強力なツールとなることを理解しました。また、実際の業務でのデータ処理や、エラーの迅速な検出・修正など、より効率的なシステム運用に役立つ点も大いに学ぶことができました。

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

PHPカンファレンス福岡2024に参加しました!

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

去る2024/6/22(土)、福岡で開催されたPHPカンファレンス2024に初めて参加しました。カンファレンスや勉強会といったものもこれまで参加したことがなかったので、とても新鮮な体験でした。早速になりますが、どのようなイベントだったか紹介できればと思います。

PHPカンファレンスとは

PHPカンファレンスとは、さまざまな地域やコミュニティから集まったPHPユーザーが集まるイベントです。ここ福岡では8回目の開催となるようです。PHPだけかと思ったら、PHP以外の話題も多く、プロジェクト運営の話やプロトコルの話など、とても刺激を受けました。イベントの合間に登壇者と話をすることもでき、ソフトウェアやアイデアについて情報交換や交流が行うことができました。

セミナーの規模

会場は福岡ファッションビルの8階にあるFFBホールで、参加人数は約150~180人ほどだったかと思います。スタッフやスポンサーの方々を含めると200人は超える人たちが集まっているように感じました。

会場の雰囲気

カンファレンスと聞くと堅苦しい場所を想像していましたが、実際に行ってみるとそんなことはなく、全体的に明るく和気あいあいとした雰囲気でした。参加者同士が自由に交流している様子が多く見られ、他県からの参加者も多くみられました。企業の出店ブースもあり、会社説明や展開しているサービスの説明が行われていました。

面白かったセッションとその内容

・Fat Controller は悪か? ~光のFat Controller・闇のガリController~

Fat Controller (Laravel 等の Web フレームワークに用意されている Controller に、要件を満たすためのあらゆる実装を書き込んでいる状態)は本当に悪なのかをテーマにしていました。特に印象に残ったのは、Controllerの肥大化がプロジェクトのメンテナンス性にどう影響するかという議論です。コードの整理と役割分担を徹底することで、チーム全体の効率が劇的に向上する可能性があると感じました。

・Laravel のセキュリティはどうなってる?突撃ソースコードリーディング

XSS、CSRF、SQLインジェクションなどのWebアプリケーションの脆弱性を、Laravelに当てはめて紹介していました。特に驚いたのは、Laravelがこれらの脆弱性に対してどれだけ包括的な対策を持っているかという点です。実際のソースコードを読んで、具体的にどのように対策が組み込まれているのかを確認することで、安心してフレームワークを使うことができ、また自分のコードで必要となる対応を組み込んでいく自信がつきました。

感想

会場に行って話を聞いて新しい技術・情報に触れることができ、非常に有意義な時間を過ごすことができました。特にFat Controllerの話は、『コントローラーが整備されていない状態だから使いずらいので、整理することで救える』ということを意識しようと改めて認識しました。実際の業務で、これらのようなアプローチを試してみようと思います。

また、Laravelのセキュリティに関するセッションでは、脆弱性対策の具体的な手法を学ぶことができ、今後の開発において非常に役立つ知識を得ることができました。フレームワークの構造を知ることで自信をもって自分のコーディングができるように感じました。

今回のカンファレンスを通じて得た知識や経験を、今後の業務に活かしていきたいと思います。次回も福岡で開催されるのであれば、ぜひ参加したいと思います。

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

PHP phar拡張モジュールの素敵な仕様

久しぶりにやってくれたPHP。
気づかず同じところに引っかかる人が出ると思ったので書いておきます。

今回PHPで.tar.gz圧縮/解凍を実装することになりまして、
phar拡張モジュールが対応しているということなので、素直にこれで実装したところ動作確認中にエラーが発生しました。

再現のための最小コードがこちらになります。

PharDataは内部でファイルパスをキーとして静的な領域にデータをキャッシュする実装になっているようで、上記のように同じファイルパスだと、複数PharDataを作成しても同じデータを指すことになり、2回目のcompressを実行しようとしたタイミングで「それはもう有るよエラー」ということです。

逆に以下のようなコードで1つのファイルを複数のPharDataで操作出来ます(意味は無い)

この現象については報告されていたのですが、ソースとかディスカッションを見るに
意図して実装されており、良い悪いは別として仕様な気がします。

https://bugs.php.net/bug.php?id=75101

1処理中に同じファイルパスで複数回ファイルを作り直すみたいなのはレアケースだと思うので遭遇する確率は低いと思いますが、記憶の片隅に留めておくとよいと思います。

新入社員ブログ 松井(第6回)

こんにちは。松井です。
もう3月になってもうすぐ年度が替わりますね!

今回はフォローアップ研修について紹介します。
フォローアップ研修の内容について簡単に説明すると業種に問わず社会人として必要なスキルを習得するための研修で、8月から2月まで月に1回の頻度で参加しました。どれも仕事上に使う内容となっており、就職前でも知っておいたほうがいいという内容でした。

ビジネス基礎研修

8月はビジネス基礎で学ぶことは一人一人が成長するために意識しないといけないことについて学びました。心構えやマナー、コミュニケーションの取り方といった仕事のやり方についての内容でした。特に印象に残ったのは「多くの視点を持つ」ということです。小さな部分だけ見るのではなく、視点を広く見たり長くしたり、時には切り替えることも必要ということです。そのため、様々な視点を持って仕事に取り組めるようになりたいと思いました。仕事への取り組み方について「分からない」といったところがあれば基本的な内容としてこの研修の内容について思い出せるようにしたいと思いました。

報連相研修

10月は報連相研修で仕事上必要な情報が入手したり他の人に情報を渡すときに必要なスキルを学びました。報連相とは「報告」、「連絡」、「相談」の3つを表します。社内の内容であればスピード重視されるため正確性は重視されませんが、社外に対してはその逆でスピードより正確性が重視されます。私の場合、社外に対する連絡の機会が少ないため、まずはスピードを重視するようにして、可能であれば正確性を担保できるようにしたいと思います。そのため、まずは自分が読み手の立場になって「伝わりやすい」報告や相談をかけるようにしています。

ロジカルシンキング研修

11月はロジカルシンキング研修で論理的に考える方法について学びました。ロジカルシンキングとは論理的思考と訳され、誰にでも使いこなせるスキルで、問題解決や仕事促進に使えるスキルです。「研修を通じて直ぐに使えるようになりたい!」と思いましたが、論理的に考えることは直ぐに使えるものではなく、経験を積むことが必要だと思いました。そのため、論理的に話すための練習を積み重ねようと思いました。そのために、何か相談をする際には自分の意見をしっかりと持って上司に説明できるように努力しています。

文章力向上研修

12月は文章力向上研修で分かりやすい文章を書くためのスキルを学びました。報連相研修やロジカルシンキングと重複している内容に似ていますが、「文章を書くためのコツ」について学びました。この研修に参加したことによって、入社前と比べ、報連相といった社内でコミュニケーションをとる際により簡潔かつより分かりやすく説明できるようになったと思いました。

ストレスマネジメント研修

1月はストレスマネジメントではストレスとの向き合い方について学びました。この研修を通じて思ったことはストレスを重ねることがないように前向きな気持ちにしようということです。また、健康管理もストレスを予防するということに関わっていますので、健康管理に気をつけようと改めて思いました。

メンター研修

2月は4月から入ってくる後輩との関わり方について学びました。メンターというのは上司といった育成者とは別の役割をしており、新人にとって「安心できる存在」となります。メンターになるメリットとしては、新人社員といった育成される立場には気づかないことについて学べるということを知りました。研修で学んだことを来年度以降先輩社員として後輩と関わる際に活かせるようにしたいです。


フォローアップ研修で学んだ内容は仕事においてかなり役に立ったと思います。特に報連相研修や文章力向上研修では、困ったことや会議で決まったことなど情報の伝え方についてコツをつかめたと思いました!
最後までお読みいただき、ありがとうございました!

Laravel Sailで記事投稿フォームを作成してみた

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

前回はLinuxについて書きましたが、今回は少し前に学習していたLaravel Sailについてまとめました。

●Laravel Sailとは
Dockerを使った開発環境であり、ターミナルでコマンド実行するだけで、DockerでLaravel環境を一発で作ってくれる便利なコマンドラインツールです。
Laravel Sailを使うメリットは次の通りです。

・開発に最低限必要なツールを一度にインストールでき、インストールの手間を省ける
・本番環境と同じ環境を手元に用意して、動作を確認できる
・PHPのバージョンが異なる複数のプロジェクトの管理が楽にできる
(Laravel 8.x からLaravel Sailは標準でインストールされています。)

●なぜLaravel Sailを使っているのか?
Laravelの学習するときに使用していた技術書がLaravel Sailでの環境構築、実装方法を紹介しているのを見て、docker環境との連携も取りやすいと思ったため、復習を兼ねてSailの紹介をやってみようと思いました。


使用したテキスト:『Laravelの教科書』

Laravel Sailのセットアップ及びLaravelトップ画面の表示
1.Docker Desktopをインストール
Dockerのインストールです。Dockerの公式サイトからDocker Desktop のインストーラーをダウンロードします。

2.Laravel Sailをインストールするディレクトリを予め作成しておきます。
今回はtest-projectフォルダを作成しました。

3.Laravel Sailのインストール
Ubuntuまたはターミナルで、次のコマンドを実行します。(今回はUbuntuを使用)

4.途中でパスワードが求められたらPCのパスワードを入力。

5.下記メッセージが出たらインストール完了です。

6.「test-project」ディレクトリへ移動します。

7.Dockerコンテナを起動します。

これによりLaravel Sailが使用する複数のDockerコンテナが起動します。
起動したコンテナについて、Docker Desktopのウィンドウで確認してみましょう。

※./vendor/bin/sail コマンドを毎回入力するのは大変です。
これを「sail」だけで使えるようにするため、エイリアス登録を行います。

以降は sail コマンドとして記載していきます。

8.マイグレーションコマンドを実行して、初期テーブルを作成する。

9.ブラウザで「http://localhost/」 へアクセスするとLaravelのスタート画面が表示されます。※Ubuntuまたはターミナルを開いたまま、ブラウザでアクセスしてください。

今回は、Laravelの復習として過去に作成したフォームの一部を紹介したいと思います。
『件名』『本文』にテキストエリアがあり、フォームの下に『送信する』ボタンがあるフォームを作成していきます。

1.モデルとマイグレーションファイルを作成
まずは、モデルとマイグレーションファイルを作ります。下記コマンドを実行して、Postモデルとマイグレーションファイルを作ります。

このコマンドを実行すると、database/migrations 配下と app/Modelsにファイルが作成されます。次にdatabase/migrations 配下に作成されたマイグレーションファイルに、postsテーブルを作成するためのtitleカラムとbodyカラムを設定します。

./database/migrations/(年)_()_(日)_(時刻)_create_posts_table.php

マイグレート実行し、データベースにpostsテーブルを作成

2.ビューファイルの作成
次にビューファイルを作ります。resources/viewsの中にpostフォルダを作り、その中に create.blade.phpファイルを作ります。create.blade.phpファイルの中には以下のコードを追加します。

create.blade.php

3.ビューファイル表示用コードを追加
次にコントローラです。下記コマンドを実行して、PostControllerを作成。

コマンド実行後、app/Http/Controllerの中のPostController.phpを開きます。先ほど作成した resources/views/post/create.blade.phpファイルを表示するためと投稿データ保存のために、下記のように記述します。

PostController.php

4.ルーティングの設定(ビューファイル表示用のルート設定)を追加
ルート設定の作成です。routes/web.phpの中に、下記のuse宣言とフォーム表示用のルート設定と投稿データ保存用のルート設定を加えます。これにより今回作成したフォームがブラウザに表示されます。

web.php

これまで記述したコードによって、次の流れが実現します。

  1. ユーザーがログイン後にhttp://localhost/postにアクセスする
  2. ルート設定により、PostControllerのcreateメソッドに処理が割り振られる
  3. 処理が実行され、resources/views/post/create.blade.phpの内容がブラウザに表示される

    実際に作成したもの

4.件名(title)と本文(body)を入力し『送信する』ボタンを押すことで、PostControllerにフォーム(http://localhost/post)を通じて値が送信される
5.ルート設定により、PostControllerのstoreメソッドに処理が割り振られる
6.処理が実行され、件名が$request->titleに、本文が$request->body にそれぞれ入っているため、Post::create() に渡してやることでpostsレコードの対応するフィールドに値がセットされる
7.returu back()によっての元ページに戻る

いかがでしょうか。

今回は振り返る形でLaravel Sailのことを書きました。
今後も学んだことを忘れないようにLaravelやLinux、業務で行った作業なども復習する形でブログ更新していきたいと思います。

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

今年度を振り返って… 紙屋06

お疲れ様です!
’23年度入社の紙屋です!

まだ寒い日も続きますね。
私は2月の一時期暖かくなった時から花粉症が出てきました…
今年の花粉症は目がとても痒いです……(泣)
薬の眠たさと闘いつつ、目の痒みとも闘いつつ、日々仕事に取り組んでいます!
早く気候も落ち着いてほしいです!

気づけばもう3月になりましたね。
先日の社内技術者定例会では新年度に向け、新入社員への対応の話も出ていました。
まだまだ新入社員でいたい気持ちもありますが、今年度を振り返って来年度に備えようと思います。


2023年4月は全くこの業界を知らないで入社しました。
入社当初は外部研修に参加させていただき、MySQL、PHP、Laravelを中心に学びました。プログラミングをやってみたい気持ちはありましたが、知れば知るほど難しく、私の固い頭では理解が追い付きませんでした。研修中は「なんで?」が多く、講師の先生へ質問を多く投げていました。今思えば、自分でも調べて質問すればよかったのですが、自分の癖もありよく調べもせずにすぐに人に聞いてしまっていました。嫌な顔をせずなんでも答えてくださった講師の先生にはとても感謝しています。

外部研修を終えて会社に戻ってからは、参考書で勉強し、課題に取り組みました。参考書はSQLドリル、PHP独習、LinuCを一通り勉強しました。研修でも触れたSQLやPHPは前向きに取り組めましたが、案件の前準備として勉強したLinuCはとても苦手意識が強かったです。ですが、案件に入った今ではよく見直してコマンドにはお世話になっています!

10月あたりからOJTでご指導いただきながら実際の案件に入りました。最初は資料の確認からでしたが、少しずつ実際のシステムの保守にも携わらさせていただきました。外部研修から社内での課題は会員登録システムを難易度をあげて取り組むものでしたが、実際の案件は扱うテーブル数もコードもとても多く、フレームワークも違って難易度がぐーんと上がりました。そこで一度「自分には無理かも…」と思ってしまい、苦手意識が生まれてしまいました。分からない点は質問すると答えてくださいますが、自分の聞きたいことがまとまらず、うまくニュアンスも伝えられず、モヤモヤすることも多かったです。

このままではいけないと、取り組む姿勢を見直しました。
それは、
① 質問する前には必ず調べ、自分の考えをしっかりと整理すること
② 活用できるメモをとること
③ アウトプットすること

です。

まずは質問する前には必ず調べ、自分の考えをしっかりと整理することですが、調べないと方向性の違う質問をしてしまったり、返答いただいてもその内容を理解できないことが多かったりしたからです。よくネット検索を活用しますが、調べたいことにたどり着けなかったり、とても時間がかかったりしてしまい、自分の考えを整理するまでに時間を要すので、これはまだまだ取り組みが必要です。

次に、しっかりとメモをすることです。教えていただく中で「前にも伝えたと思いますが」という言葉を耳にします。メモを取ることは新人にとっては当たり前ですが、メモしてもそれを活かせないのであればメモの意味がありません。私はメモを取るときは、必ず日付を書くこと、チケット番号など見出しや題名をつけること、メモの書く場所を注意する、内容によって社内業務なのか、案件のものか、期限付きのものなのかを意識して場所も分けるように書いています。todoリストのように□の枠を書いて目立つようにしたり、レビュー中(画面共有中)はコードの中にコメントとして入力し、指導者へもメモ内容が見えるように意識しています。電子媒体でメモを取りたいなとは思っていますが、まだまだアナログな私は紙媒体でのメモが主流です。技術面で新しいことを教えていただいた時には紙媒体でのメモは後で見返してもよく整理ができないので、教えていただいた後すぐに自分なりの手順書を作っていつでも見返すことができるようにしています。

あとは、アウトプットをすることです。このブログもそのひとつですが、小さな取り組みとしては、なるべく声に出すようにしています。1対1のLINE上のやりとりももちろんあるのですが、文章ではニュアンスも伝えにくく、文章ではうまく伝えられなかったが、通話でやり取りするとそこまで考えが乖離していなかったということが時々ありました。これはこれで文章力を鍛える必要がありますが…(汗)。また朝礼や終礼での報告時も集団の中であえて質問など声にだすことで、自分の考えを知ってもらえれば、その考えがどうなのかを確かめられたり、それを繰り返すことによって自信につながったりすると思っているからです。今はレビューいただいたときは必ず結果の要約や次回までにすべきことを自分の言葉で繰り返して指導者へ伝えるように努力しています。

他にも意識して取り組むべきことはあると思いますが、とりあえずはこれらを意識しています。まだまだ学習やプログラミングに触れる機会を増やす必要があると思っています。
来年度は実際にコードをかくことはもちろんですが、
① 基本情報技術者試験に挑戦!(ITパスポートは無事合格しました!)
② PHPカンファレンスなどの勉強会にも参加する!(2023年度のPHPカンファレンスは近所で開催されていたのに情報収集が足りずに開催直後に気づきました…)
③ 通勤中の時間を使って、ポットキャストで初心者向けのプログラミング番組を聞く!(現在継続チャレンジ中で習慣化へ!)
と思っています!

このブログも使ってこれからの成長した姿もお伝えできればと思います!
今年度の残りも、来年度からもまだ頑張りますので、応援、ご指導よろしくお願いいたします!
では!!

新入社員ブログ 松井(第5回)

こんにちは。松井です。もうすぐ2月になりまだまだ寒い時期が続きますね。

今回はOJTについて紹介します!内部研修が終わって、8月からOJTに参加しています。OJTということで、案件に参加していますが、私の場合は基本設計から参加しました。難しい作業を割り振られることはありませんが、とにかく仕事に慣れることに苦労しました。1月末までどんなことをやってきたか、簡単になりますが紹介します!

基本設計・詳細設計

お客様との打ち合わせや社内会議を聞いてメモを取ったり、画面設計書を見ていました。また、先輩社員がテーブル定義の物理カラム名の名前をつけていました。画面設計書やテーブル定義について「おかしい!」と思ったところは迷わず先輩社員に質問していきました。例を2つ挙げると画面設計書に書いてあることがテーブル定義に書かれていないといった資料での漏れとテーブル定義には必須扱いになっているにもかかわらず画面設計書では必須ではないといった資料間による矛盾です。冷静に資料を見比べることで漏れや矛盾が無いかチェックをしていましたので、該当する部分が資料内にあるか探すのが大変でした。しかし、設計段階で漏れや矛盾を減らしたということにおいてはやりがいを感じられました!

API仕様書・詳細設計書作成

簡単な処理のAPI仕様書・詳細設計書を作成しました。最初はやり方が分からず簡単そうな画面を先輩社員に教えてもらいながら一通り作成しました。最初は簡単な仕様の詳細設計書を書きましたが、やり方が分からず先輩社員が作成した詳細設計書を参考に書くようにしました。ある程度詳細設計書を書いたら「内容は違っても他の詳細設計書にも同じことを書ける」ということを意識するようにしました。その際に自分たちが作った設計書をもとに実装されるので、「仕様が違う」ということが無いように気を付けるようにしました。

API実装・テスト

今は作成したAPI仕様書や詳細設計書を元にAPIを実装しつつ、テストして想定した挙動になっているか確認しています。研修で学んだLaravelで実装しておりますが、実際に仕事として使うのは始めてでプログラムの書き方に戸惑うことがあります。しかし公式ドキュメントやQiita等で使い方を調べて出来る限り自力でプログラムを組めるように努力しています!

今回はここまでです。次回はフォローアップ研修について紹介します。最後まで読んで頂きありがとうございます!

SQLの不思議… 紙屋05

’23年度入社の紙屋です!
2024年もよろしくお願いいたします。

新年一発目の投稿です。
無事に新年を迎えることができました!
昨年は少し実際の案件にも携わらせていただきました。少しずつできることも増えてきたことはうれしいです!
2024年もできることを着実に増やしながら成長したいと思います!

今回はその案件の中であるデータの差分の調査を行っているときに不思議に思ったことを検証してみようと思います。
それはSQLである一定の期間のデータを抽出しようとしたときに、何気なく使っていたある演算子で躓きました。最初は気づかなかったのですが、調査結果のデータ数がおかしいことの指摘もあり気づきました。
それは『BETWEEN』の使い方です!

—————————————-
式 BETWEEN 値1 AND 値2
—————————————-
BETWEEN演算子では、値が「値1以上かつ値2以下」の場合に真になる

と参考書ではあります。
私は1か月分のデータを抽出したかったので、

というSQL文を作成し抽出しました。
特に疑問に思うこともなく作業を続け、他で分からないところがあったので、質問したときに、指導者とのSQL文の違いに気づきました。

「ん?演算子ちがうけど、まぁいっか、同じことだし…」
「でも、結果も違うんだよなぁ…、どうしてだろう?」
と思ったことで調べるとどうやらデータ型がdatetime型であることも関係しているらしいということが分かりました。
そこでダミーデータを作って検証してみることにしました。

今回、ダミーデータはLaravelのマイグレーションとシーダーを利用して’2023/11/01 00:00:00’から’2023/12/31 23:59:59’までのデータを100件作成しました。
そして、同じ条件式で行数をカウントしました。

この条件式の結果は、条件式1は50件、条件式2は56件と件数の差が出ました。
ちなみに、抽出条件の範囲を変えると、条件式3は53件、条件式4は3件でした。
抽出する条件のデータ型がdatetime型だったので、範囲指定には注意が必要そうです。

ちなみにdate型でもデータ数のカウントを行いましたが、時間が無い分、選ぶ演算子での差はみられませんでした。
今回の始まりは演算子の疑問で始まりました。
BETWEENを使う際は抽出される範囲とデータ型を十分に理解したうえで使う必要があります。
私みたいな初学者や不慣れな方は、データの範囲を指定して抽出する場合はまず比較演算子を利用する方が良いということを覚えておきましょう!

今回は文献を調べるだけでなく、自分でも実際のデータを使って結果の違いを理解できたので、引き続き今回のように検証しながら自分の理解を深めたいと思います。

では、また次回!!

ITパスポートの試験を受けました!紙屋04

お疲れ様です!
’23年度入社の紙屋です!
12月に入り本当に寒くなってきました。
こんな季節は温泉にゆっくりつかって、コタツで丸くなりたいですね!

さて、この業種について9か月が経とうとしています。
未経験で入社し、外部研修や日々の学習や課題をこなしてきました。今もOJTとして少しずつ実際の案件に携わらせてもらっています。
分からないことの方が多く、教えていただいてもなかなか理解ができないことの方が多い毎日です。
なので、基礎知識の学習という意味でもITパスポート試験を受けることにしました。

ITパスポート試験とは何か?

ITを利活用するすべての社会人・これから社会人となる学生が備えておくべき、ITに関する基礎的な知識が証明できる国家試験

https://www3.jitec.ipa.go.jp/JitesCbt/html/about/about.html

とのことです。
確かに、前職は全く違う分野でしたが、ITなくして業務は成り立ちませんでした。
基礎的知識を学ぶためにもちょうどよい機会かなと思い、チャレンジしました!

内容は、新しい技術(AI、IoT など)や手法に関する知識、経営全般の知識、IT(セキュリティ、ネットワークなど)の知識、プロジェクトマネジメントの知識など幅広い分野にわたります。

実際の試験は100問(/120分間)あり、ストラテジ系、マネジメント系、テクノロジ系と3分野に分かれ、合格基準点は3分野それぞれ300/1000点以上正答し、合計で600/1000点以上あれば良いとのこと。

勉強期間は約2か月間。
最初はテキストの内容をまとめ、各章末問題を解き、試験前は過去問をひたすら解きました。
広く知識を求められ、テキストを通るだけでもかなりのボリュームがありました。
適宜まとめた内容を上長へレビューいただきましたが、広い分野に対しても必ずコメントをいただき、アドバイスもいただいて、その知識量に逆に怖くなりました(笑)

どれも知らない知識ばかりで、特にストラテジ系とテクノロジ系が難しかったです。
3,4文字のアルファベットの略語は暗号にしか思えず、関数の条件式を問うような問題ではまず問題文の理解に苦しみました…
過去問で類似問題を数回解くことでなんとか少しずつ覚えていきました。

過去問を解き始めたころは5,6割の正答率でした。過去問を数回解くことで正答率は7,8割まで安定してきたので、「よし!いける!」と自信満々で試験を受けに行きました。
今までも国家試験を受けてきたので特に緊張はしませんでした。
受験者の中には管理職ぐらいの年代の方から小学生までいて驚きました!

試験の方は、苦手分野のストラテジ系でさらに新しい単語が出題され、とても焦りました…(汗)
利益やコストの計算や関数の条件式を問う問題など、計算問題が過去問より多く、それでも焦りました…(汗)
残り時間20分ぐらいでやっと一通り解答できましたが、見直ししたい問題が多すぎて「詰んだー」と焦りました…(汗)

試験後はすぐに解答され、ギリギリ基準点は満たすことができて一安心。
覚えも悪くなってきているなと痛感した1日でした。
今回の勉強の熱が冷めないうちに、勉強を続けてさらなる挑戦に挑みたいと思います。
また何か動きがあれば決意表明をしたいと思います!
では、また次回!!