Linux学習についてのまとめ 03 ファイルシステム

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

前回はLinuC101試験に向けての学習の一環として、GNU/Linuxついての記事を作成しました。今回はLinuC101試験のファイルシステムについての内容をまとめました。この記事を通じて、ファイルシステムの基本的な内容、ファイルシステムのマウントとアンマウント、ファイルシステムのバックアップについて共有します。

1. ファイルシステムとは

ファイルシステムとは、コンピュータのストレージデバイス(HDD、SSDなど)上でデータを管理するための方法であり、データの保存、取得、整理を行います。ファイルシステムは、ファイルを格納する場所(ファイルシステムのブロック)とその情報を格納するメタデータを管理します。例えば、ファイルの名前、サイズ、作成日などです。

2. ファイルシステムの作成と管理

ファイルシステムを新しく作成するには、mkfsコマンドが一般的です。具体的な手順は以下の通りです。

ファイルシステムの作成

ファイルシステムの管理

作成したファイルシステムの管理には、tune2fs(extファイルシステム用)やxfs_admin(xfs用)といったコマンドが使用されます。例えば、tune2fsを使用してext4ファイルシステムの設定を変更することが可能です。

3. 一般的なファイルシステムタイプ

Linuxではいくつかのファイルシステムタイプがサポートされており、用途に応じて選択することが重要です。以下は代表的なファイルシステムタイプです。

コマンド説明
ext3ext3は、Linuxで広く使用されているジャーナリングファイルシステムで、ext2ファイルシステムの後継として登場しました。ジャーナリング機能により、システムクラッシュや突然の電源断からの回復が速くなります。
ext4最も一般的なLinuxのファイルシステムであり、ジャーナリング機能を持ち、データの信頼性が向上しています。ext4は、安定性と速度のバランスが良いため、個人のPCやサーバーにも広く利用されています。
xfsxfsは、大容量ファイルや高速な書き込みが必要なシステムで利用されます。特にデータベースやファイルサーバーに適しており、スナップショットやデータの圧縮機能を提供します。
btrfsbtrfsは、スナップショット機能や圧縮、自己修復機能を備えた新しいファイルシステムです。ファイルシステムの管理が容易で、ストレージの拡張性や効率性に優れています。
f2fsフラッシュメモリ向けに最適化されたファイルシステムで、特にSSDやeMMCのようなフラッシュストレージに適しています。
iso9660iso9660は、主にCD-ROMやDVD-ROMなどの光ディスクメディアに使用されるファイルシステム規格です。このファイルシステムは、光ディスクにおけるデータの標準的な配置方法を定めています。
UDFUDFは、光ディスクやその他のストレージデバイス向けに設計されたファイルシステムで、iso9660の後継として登場しました。主にDVD、Blu-rayディスク、USBフラッシュドライブなどの書き込み可能なメディアで使用されます。

4. スワップ領域について

スワップ領域は、システムメモリ(RAM)が不足した際に使用されるディスク領域であり、仮想メモリの一部として機能します。スワップ領域を設定することで、システムがメモリ不足の際にハングアップせずに動作を維持することができます。

スワップ領域の作成例:

ここで、/dev/sd2はスワップ領域として使用するパーティションです。swaponコマンドでスワップを有効にすることができます。

5. ファイルシステムのマウントとアンマウント

ファイルシステムは、物理デバイス(ハードディスク、SSD、USBドライブなど)に格納されたデータにアクセスするために、システムに「マウント」して利用します。マウントとは、ファイルシステムを特定のディレクトリに接続し、そこからファイルにアクセスできるようにする操作です。アンマウントは、逆にファイルシステムを切り離し、デバイスを安全に取り外すための操作です。

Linuxでは、mountコマンドとumountコマンドを使ってファイルシステムをマウントおよびアンマウントします。

ファイルシステムのマウント

ファイルシステムをマウントするには、mountコマンドを使用します。マウントは、デバイスとマウントポイントというディレクトリを指定して行います。マウントポイントは、ファイルシステムが接続されるディレクトリで、通常は/mntや/mediaが利用されますが、任意のディレクトリを指定できます。

例えば、/dev/sda1というパーティションを/mntにマウントする場合、次のようにコマンドを実行します。

このコマンドを実行すると、/dev/sda1の内容が/mntディレクトリに表示され、そこからファイルを読み書きできるようになります。

例:ファイルシステムをマウントする

例えば、/dev/sda1という外部ドライブを/media/usbというディレクトリにマウントしたい場合、次のようにコマンドを実行します。

これで、/media/usbにアクセスすることで、外部ドライブ内のファイルを操作できるようになります。

マウントのオプション

mountコマンドには、さまざまなオプションを付けてマウントをカスタマイズできます。以下は代表的なオプションです

  • -t:マウントするファイルシステムのタイプを指定します(例:ext4、xfs)。bashコードをコピーする 
  • -o:特定のオプションを指定します。例えば、ro(読み取り専用)やnoexec(実行不可)など。bashコードをコピーする 
  • -v:詳細な出力を表示します。マウントの進行状況やエラーを確認できます。bashコードをコピーする 
永続的なマウント(/etc/fstabを使用)

一度マウントしたファイルシステムは、再起動後に自動的にマウントされるわけではありません。システムの起動時に自動的にマウントするためには、/etc/fstabというファイルに設定を追加する必要があります。

/etc/fstabファイルに、マウントするデバイスとマウントポイント、ファイルシステムタイプなどを記載します。例えば、/dev/sda1を/mntにマウントする設定は次のように記載します。

これで、システムが起動するたびに/dev/sda1が自動的に/mntにマウントされます。

ファイルシステムのアンマウント

ファイルシステムをアンマウントするには、umountコマンドを使用します。アンマウントは、ファイルシステムへのアクセスを停止し、デバイスを切り離す操作です。

アンマウントするには、マウントポイントまたはデバイスを指定します。例えば、/mntをアンマウントするには次のようにコマンドを実行します。

また、デバイス名を指定してアンマウントすることもできます。

アンマウント時の注意点
  • アンマウントを行う前に、マウントされているディレクトリ内のファイルが使用中でないことを確認する必要があります。ファイルが開かれていたり、プロセスがファイルシステムにアクセスしていると、アンマウントできない場合があります。
  • lsofコマンドやfuserコマンドを使って、ファイルシステムを使用しているプロセスを確認できます。

または

これらのコマンドを使って、ファイルシステムを使用しているプロセスを確認し、プロセスを終了させてからアンマウントすることができます。

6. ファイルシステムの整合性チェックと修復

ファイルシステムの整合性を維持するためには、定期的なチェックと修復が重要です。特に、システムがシャットダウン不完全であった場合や、ディスクの物理的な問題が発生した場合には、ファイルシステムが壊れることがあります。そのため、定期的なチェックと修復作業はシステムの安定性を保つために欠かせません。

Linuxでは、fsck(File System Consistency Check)コマンドを使用して、ファイルシステムのエラーをチェックし、修復することができます。fsckは、指定したファイルシステムに対して以下の作業を行います:

  • ファイルシステムのメタデータを確認し、破損している場合には修復
  • ファイルシステム内での不整合を検出し、修復
  • 破損したファイルを隔離し、可能な限り復旧

fsckコマンドの使い方
ファイルシステムの整合性をチェックするためにfsckコマンドを使用します。例えば、/dev/sda1というパーティションのファイルシステムをチェックするには以下のコマンドを実行します。

このコマンドを実行すると、システムは自動的にファイルシステムを確認し、エラーが発見されると修復を試みます。

例: fsckの実行
例えば、次のようにコマンドを実行した場合、ファイルシステムにエラーがあったと仮定します。

出力例:

この場合、fsckはエラーを修復し、破損していないかを確認します。e2fsck(ext2/ext3/ext4ファイルシステムのチェックツール)は、実際に問題が見つかると、修復するかどうかを尋ねることがあります。たとえば、「修復するか?」という確認メッセージが表示されることがあります。

例文:

このメッセージは、ファイルシステムが正常であり、エラーがないことを意味します。

コマンドのオプション

fsckコマンドには、いくつかの便利なオプションがあります。例えば、-yオプションを使用すると、すべての修復を自動的に承認します。手動で確認することなく、エラーを修正する場合に便利です。
例文:

-nオプションを使用すると、修復せずにエラーメッセージを表示するだけになります。これを使うことで、実際に修復作業を行う前にエラーを確認できます。
出力例:

ブート時の自動チェック

多くのLinuxディストリビューションでは、システム起動時に自動的にファイルシステムのチェックを行います。もしファイルシステムに問題が発見されると、fsckが自動的に修復処理を行います。この処理が長時間かかる場合もあるので、定期的にディスク状態を確認しておくことが推奨されます。

例えば、システム起動時に「ディスクにエラーがあるため、fsckが実行されています」といったメッセージが表示されることがあります。

ファイルシステムの修復後

ファイルシステムが修復されると、fsckコマンドは修復後の状態を報告します。報告には、修復したエラーの数や修復内容が含まれます。例えば、次のような報告が表示されます。

これは、ファイルシステムに問題がなかったことを意味します。

ファイルシステムが修復できない場合

fsckがファイルシステムを修復できない場合もあります。その場合、手動でさらに調査したり、バックアップからの復元が必要です。例えば、物理的なディスク障害がある場合や、データが完全に破損している場合には、fsckでは回復できないことがあります。

そのため、定期的なバックアップと、fsckによる早期のチェックが非常に重要です。システムの信頼性を確保するために、バックアップの重要性を忘れないようにしましょう。

おわりに

今回の記事では、LinuC101試験に向けての学習の一環として、ファイルシステムの基本的な内容、ファイルシステムのマウントとアンマウント、ファイルシステムのバックアップなどについてまとめました。ファイルシステムの正しい管理は、Linuxシステムの安定性を保つために不可欠です。今回紹介したファイルシステムの作成と管理、各種ファイルシステムタイプ、スワップ領域の使用方法、マウントとアンマウント、整合性チェックとバックアップをしっかり理解し、実際の操作を繰り返すことで、LinuC 101試験にも十分に備えることができるでしょう。

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

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を使う際は抽出される範囲とデータ型を十分に理解したうえで使う必要があります。
私みたいな初学者や不慣れな方は、データの範囲を指定して抽出する場合はまず比較演算子を利用する方が良いということを覚えておきましょう!

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

では、また次回!!