2025年 新入社員ブログ 遠藤02 [人工知能について]

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

今回はAI(人工知能)についてお話いたします。
研修の際、AIについて面白い話が聞けたので、皆さんにもお伝えしたいと思います。

AI(人工知能)とは

AIとは、機械学習アルゴリズムを用いることですべての動作を明示的に指示しなくても、機械自身が考え、実行できる技術です。
最初からすべてをできるわけではなく、与えられたデータから学習し、様々なことを自らで判断することができるようになっていきます。
AIはその知能レベルによって下記の3種類に大別されます。

・特化型AI(ANI)
特定のタスクに特化したAI。

・汎用AI(AGI)
人間と同等の知能を有したAI。

・超知能AI(ASI)
人間の知能を超えたAI。

現時点のAI

現在のAIの知能レベルはANI、特化型AIの段階です。
業務や私生活でも日常的に使われるようになったAIも、人間には容易にできるが、機械自身が判断するには難しいタスクが存在するという点において、いまだ汎用AIとは呼べない段階です。
しかし、対話型の生成AIによってさまざまなタスクの実行が可能となり、汎用AIへと近づいています。
AIの汎用性は多くの企業の研究によって現在も飛躍的に向上しているのです。

AIの今後

特化型AIである現在のAIが汎用AIとなるには、AIが人間と同程度の知能を有する必要があります。
現時点での課題には、以下のようなものがあげられます。
・少ない情報からの仮説立案
・身体性を伴う情報収集
・感情の理解
etc…
これらの課題を解決するには、自己学習能力の強化、身体性などの要素を獲得する必要があります。
汎用的な働きをするには、遠い未来のような話に聞こえますが、今後10年以内に汎用AIは実現されるとされています。
人やモノとふれあい、情報を自ら取得し、少ない情報からでも判断する知能を有する技術の研究が、日々されています。
また、現段階ではASI、超知能AIはまだ理論的な概念に過ぎませんが、汎用AIが実現すれば超知能AIに進化する可能性が高いと考えられています。

まとめ

技術の進歩はすさまじく、人間の暮らしを快適にする一方で、AIの進化によって、雇用が奪われる等のリスクが生じることもあります。人間の働き方も大きく変わっていくことでしょう。
人と同等の知能を有し、身体性を獲得したとしても、人々に受容されなければ、その価値を発揮することができません。新しい技術との上手な向き合い方も探していかなくてはいけないと感じました。
基礎的な知識を学び、その証明となる「生成AIパスポート」という資格試験も存在するようです。生成AIについて正しく理解するために受験するのもよいかもしれません。

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

2025年 新入社員ブログ 遠藤01 [フォローアップ研修]

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

今回はフォローアップ研修についてお話いたします。
われわれ2025年度入社社員一同は4月より、約二か月間外部での研修を受けさせていただいておりました。
そこでは、ITとは何かという情報基礎の学習から、実務で用いるようなコードの書き方、アプリ開発まで多くのことを学びました。
今回の研修は、その後のフォローアップ研修という位置づけで、ビジネス基礎を学びました。社会人としての仕事への姿勢を学ぶことが目的です。

研修で学んだこと

・業務の振り返りと仕事への心構え
入社してから今までの業務を振り返る。
仕事への心構えを再認識し、効率よく円滑に業務に取り組むためにすべきことを改めて考える。

・ビジネスマナー
人間関係を築き、より良い組織づくり。
自分の対応が会社の評価となることを自覚する。

・コミュニケーション
コミュニケーションが組織を守り、自分も守る。
相手に何がどのように伝わったのかを意識する。

・キャリア
地位、役職が同じ人物でも、仕事への興味や、やりがいの違いが個人やチームでの成長への違いとなる。

・ストレスコントロール
ストレスとうまく付き合い、どのように解消できるのか、何が原因なのかを考える。
また、自己効力感を高めることで、そもそものストレスを感じることが減少する可能性がある。
しかし、適度なストレスが達成感や良い緊張感を生み出すこともあるため、一概にすべてのストレスが悪いわけではない。
そのため、ストレスをコントロールすることが重要になる。

今後について

今回の研修で、PDCAサイクルを上手に回すこと、スピードを意識した業務をすることで作業の効率をあげることができると学びました。
スピードを意識することでその業務への集中力が増し、質の高いものを作ることができるという観点は、今まで自分にはなかったものなので新鮮でした。
また、コミュニケーションにおいては、互いに尊重しあい、調和したコミュニケーションを図ることで、誰もが働きやすい環境づくりが大切であると感じました。
できることを増やし、与えられたチャンスを逃さず様々なことに挑戦していくことで、成功も失敗も経験し、すべての出来事を成長につなげていきます。

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

[PHP]PHP-Parserを用いたメタプログラミングについて

こんにちは。24年度入社の吉岡です。
案件で、システムで用いられているPHPソースコードとフレームワークのバージョンアップ作業を行いっています。作業の内容として大量に同様の変更を行いたい箇所があり、自分たちのチームはPHP-Parserを使用しました。PHP-Parserは今後の案件でも作業の効率化に役立ってくれると思いまので、共有させていただきます。

〇PHP-Parserとは
PHP-Parserは「PHPで書かれたPHPパーサー」のことです。
PHPパーサーはPHPソースコードをAST(抽象構文木)に変換し、変更を加え、変更後のASTをPHPソースコードに出力することができます。
AST(抽象構文木)は指定されたプログラミング言語の文法に従ってソースコードの構造を表す中間プログラムです。ソースコードのアイテムごとに対応するノードを用いて表現されます。

「手作業でよいのでは?」と思われるかもしれませんね。確かに変更箇所が少数であったり複雑な変更を加えたい場合は手作業の方が楽な場合も多いでしょう。
しかし、単純な変更を大量にしなければならない場合はどうでしょうか?
システム内のすべてのファイルに declare(strict_types=1); を追加したい」「システム内のすべての配列を、array() から [] に記述を統一したい」という場合に、手作業で行うと多くの時間が掛かりミスが生じやすくなってしまうかもしれません。

そんな時はPHP-Parserの使用を検討されてはいかがでしょうか?


〇PHP-Parserを用いた変更処理の流れ
1 PHPソースコードからASTへパース
2 ASTへ変更を加える
3 新ASTから新PHPソースコードへパース


*インストール
パースしたいPHPソースコードのバージョンによって、PHP-Parserのバージョンを選択してください。

・PHP-Parser 4.x
動作環境: PHP7.0以上で動く
サポート範囲: PHP5.2~8.3( PHP5.xの解析を完全にサポート)
https://github.com/nikic/PHP-Parser/blob/4.x/doc/0_Introduction.markdown

・PHP-Parser 5.x
動作環境:PHP7.4以上で動く
サポート範囲:PHP7~8( PHP5.xの解析も部分的にサポート)
https://github.com/nikic/PHP-Parser/blob/master/doc/0_Introduction.markdown

コマンド

1 PHPソースコードからASTへパース
PHPソースコードを取得し、パーサーを用いてASTへパースを行います。

・入力用PHPソースコード (inputSampleData.php)

・パース処理(changePhp.php)

・実行

・実行結果(変換されたAST)
コストコのレシートくらい長いですので、ざっと目を通していただければ十分です。「Stmt_Classってやつはクラス定義のことなんだろうな」「Expr_Array_って書いてあるから配列のなんだろうな」ぐらいでOKです。

ノードを用いて変更箇所を指定して、追加・変更・削除などの変更処理を行います。それぞれのノードクラス定義に関する詳細は、nikic/php-parserの公式ドキュメント(5.x版) または vendor/nikic/php-parser/lib/PhpParser/Node/ ディレクトリ配下から探してください。(どのクラスなのか名前で推測できるものが多いと思います)

2 ASTへ変更を加える
今回の本命である、パースされたASTに対して変更を行います。変更を行うにNodeVisitorクラスを基に任意の操作を行うクラスを作成し、「どのタイミングでどの操作を」定義します。

・変更処理セットして実行(changePhp.php 続き)

・PHPの厳密な型判定を設定する記述を追加するNodeVisitor(StrictModeRevisingVisitor.php)

・配列をarray()から[]に統一するNodeVisitor(ArrayKindRevisingVisitor.php)

これで変更を加えることができました。

3  新ASTから新PHPソースコードへパース

・changePhp.php 続き

・出力ファイル(outputSampleData.php)

変更できました。ただこの記述だとパース時に空欄削除などのフォーマットが行われます。

元のソースコードの書式を保ったままパースする記述を載せておきます。

・変更処理セットして実行(changePhpNoFormat.php)

・実行結果

入力したPHPソースコードと同じく、クラスメソッドが値を返す処理の前に空欄行が残したままにできていますね!

〇おわりに
プログラミングやITの知識だけではなく、「必要な情報を得る力」は本当に重要ですね。特に、ネットの記事で親切丁寧に紹介されていない知識を得たい場合や古いドキュメントから使用を知りたい場合などだと、自分の「必要な情報を得る力」のなさを痛感することが多くあります…
今後AIがより身近になってきて仕事上でも活用しそうだからこそ、検索の仕方や質問の仕方をより一層鍛えていきます!

・参考にさせていただいた記事
https://www.komtaki.com/posts/php-meta-programming-introduction
https://qiita.com/ktplato/items/23ad2893d741bfb564f9meta-programming-introduction

https://qiita.com/ktplato/items/23ad2893d741bfb564f9

[LinuC]Linuxのパーミッションについて

2024年4月入社の吉岡です。以前から「Linuxはコードを書くよりも直感的でないし自分にサーバ・インフラ関係はよくわからない…」と苦手意識を持っていたのですが、苦手なまま避け続けるのは精神衛生によくないと感じ取り組んでみることにしました。現在はLinuCレベル1の取得を目指しており、LinuC公式のテキストとPing-tに取り組んでいます。その中で学んだLinuxのファイルやディレクトリのパーミッションについてまとめさせていただきました。

誰向けの記事か:プログラミング諸学者向け

目次

  • パーミッションとは
  • ディレクトリのパーミッション設定例
  • 特殊なパーミッション
  • デフォルトパーミッションの設定

〇パーミッションとは

パーミッションはアクセス権限のことであり、主に用いられるパーミッションとして、読込権限・書込権限・実行権限の3種類があります。各パーミッションを所有者・グループ・その他ユーザごとに設定することでセキュリティを高め、システムの目的に沿った使用がされやすくなります。

各パーミッションで可能になる動作を下記の表にまとめました。

パーミッションファイルの場合ディレクトリの場合
読込権限(r|4)ファイルの内容を表示ファイルのリストを表示
書込権限(w|2)ファイルの上書きファイル作成・削除
実行権限(x|1)ファイルの実行ディレクトリ内に入れる

「$ls -l ファイル名」 または 「$ls -dl ディレクトリ名」 で10桁のパーミッションコードを確認することができます。
パーミッションコードの左から1番目の記号はファイルの種類を表しており、左から2~4番目が所有者のパーミッション、左から5~7番目がグループのパーミッション、左から8~10番目がその他ユーザのパーミッションを表しています。

パーミッションコード例: -rwxr-x–x
ファイルタイプ:「ファイル」
所有者のパーミッション:「読込権限・書込権限・実行権限」
グループのパーミッション:「読込権限・実行権限」
その他ユーザのパーミッション:「実行権限」

ファイルタイプ記号ファイルタイプ
ファイル
dディレクトリ
lシンボリックリンク
cキャラクタデバイス(キーボードなど)
bブロックファイル()
sソケット(双方向)
pFIFO(一方向)
?その他

パーミッションを変更したい場合は、chmod コマンド で8進数またはシンボルで変更後のパーミッションをしてすることができます。

・8進数で指定する場合
付与したいパーミッションを読込権限(4)、書込権限(2)、実行権限(1)とした時の合計値でsi表現する。3桁の8進数で指定する場合は左から所有者のパーミッション・グループのパーミッション・その他ユーザのパーミッションを設定し、4桁の場合は左から特殊パーミッション・所有者のパーミッション・グループのパーミッション・その他ユーザのパーミッションを設定する。

・シンボルで指定する場合
付与したいパーミッションを読込権限(r)、書込権限(w)、実行権限(x)、で表現する。所有者のパーミッション(u),グループのパーミッション(g),その他ユーザのパーミッション(o)に対してそれぞれ設定したいパーミッションを設定する。

〇ディレクトリのパーミッション設定例

個人的にディレクトリのパーミッションは動作を行うことができるのかわかりづらいと感じたので、いつくか具体的な例を挙げさせていただきます。

例1:ディレクトリに読込権限はあるが実行権限がない場合
読込権限があるのでディレクトリ自体の情報は参照できるが、実行権限がないのでディレクトリの中には入れずディレクトリのリストの中身を表示できません。

実行権限を付与したら、リストの中身を取得できます。中身を追加していないのでカレントディレクトリと親ディレクトリのみです。

例2:ディレクトリに読込権限と書込権限はあるが実行権限がない場合
ディレクトリの中に入ることができないので、touch コマンドやリダイレクトを用いてファイルの作成やファイル内容の更新や削除はできない。

*ただしディレクトリ中に入る必要がないので、ディレクトリ名の変更はできる。

実行権限を付与したら、ファイルの作成やファイル内容の更新や削除ができるようになりました。今回は「>」 を用いて文字列の標準出力先を指定ファイルにリダイレクト(宛先ファイルが存在しなければ新規作成/存在すれば上書き)を行い、「>>」 を用いてファイルの中身へ追記を行いました。

例3:権限のないファイルの削除
sample2 ディレクトリ : 読込権限と書込権限と実行権限がある。
sample2/sampleA.txt : 読込権限と書込権限と実行権限がない。
この状態でファイルの削除をしようとすると…削除ができてしまうんです!

グループやその他のユーザでも同様なので、ファイル自体のパーミッションを適切に設定していても、ディレクトリのパーミッション次第でファイルの削除ができてしまいます…
例:
sample2 ディレクトリ :所有者 linuc グループ linuc
sample2/sampleA.txt : 所有者 linuc グループ linuc

適切なパーミッション管理のために、特殊なパーミッションを使用することができます。

〇特殊なパーミッション

・Sticky Bit

設定方法:パーミッション指定で1000番台を指定またはその他ユーザの権限に「t」を付与する。
例:
sample2 ディレクトリ : 読込権限と書込権限があり、実行権限にSticky Bitが設定されている。
sample2/sampleB.txt : 読込権限と書込権限と実行権限がない。
Sticky Bitを設定したディレクトリ内は、root権限ユーザまたは作成したユーザーのみが削除できる。

sudo コマンドを用いればrootユーザでなくても削除することは可能です。
sudo コマンドを使用可能かはユーザが「wheel」グループに所属しているかどうかで確認できます。「wheel」グループに所属していない場合、sudo コマンドを使用できません。

rootユーザで「wheel」グループに所属を追加

sudo コマンドでStick Bitを設定しているディレクトリ内のファイルを削除

パーミッションを設定する際はファイルやディレクトリだけでなく、ユーザのグループにも注意が必要です。

Sticky Bitを設定してあるファイル・ディレクトリを探したい場合
$find / -user root -perm -o=t -type f 2>/dev/null

その他の特殊なパーミッション
・SUID(Set User ID)
プログラムが実行されると、そのファイルの所有者の権限でユーザーが実行されるようにする。実行権限がある場合は「s」、実行権限がない場合は「S」で表記される。
設定方法:パーミッション指定で4000番台を指定またはユーザーの権限に「s」または「S」を付与する。

例:passwd コマンドファイルのSUID
passwd コマンドを用いてパスワードを設定すると /etc/shadow ファイルに変更後のパスワードを書き込みを行います。passwd コマンドを用いる場合、root権限でのみ/etc/passwd ファイルと /etc/shadow ファイルへの書き込みができます。(*ディストリビューションによってパーミッションは異なる場合があるので注意してください)

SUIDを剥奪して passwd コマンドでパスワードを設定しようとすると、/etc/passwd ファイル と /etc/shadow ファイルへの書き込み時にエラーが発生します。(rootユーザまたはsudo コマンドを用いるとエラーは発生しません)

SUIDを付与すると正常にパスワードを設定できるようになりました。

SUIDを設定してあるファイル・ディレクトリを探したい場合
$find / -user root -perm -u=s -type f 2>/dev/null

・SGID(Set Group ID)
ファイルが実行されると所有グループ権限でユーザーが実行できるようにする。
設定方法:パーミッション指定で2000番台を指定またはグループの権限に「s」を付与する。
SGIDを設定したディレクトリ内でファイルを作成すると、作成されたファイルのグループにディレクトリのグループが自動的に設定される。
例:
SGIDが設定されたディレクトリ名: sample3
SGIDが設定されたディレクトリのグループ名: yoshioka
ログインユーザ名: linuc

SGIDを設定してあるファイル・ディレクトリを探したい場合
$find / -user root -perm -g=s -type f 2>/dev/null

〇デフォルトパーミッションの設定

デフォルトパーミッションとはコマンドで明示的にパーミッションを指定せずにファイルやディレクトリを作成した際に付与されるパーミッションのことです。基本パーミッションからマスク値を引くことで設定されます。

・umask コマンド
umask コマンドでマスク値を表示・設定することができます。

基本パーミッションからマスク値を引いた値がファイルやディレクトリ作成時のデフォルトパーミッションです。

ファイルディレクトリ
基本パーミッション666(-rw-rw-rw-.)777(drwxrwxrwx.)
マスク値022022
デフォルトパーミッション644(-rw-r–r–.)755(drwxr-xr-x.)

・デフォルトパーミッションの変更

例1:このシェルセッションでのデフォルトパーミッションを変更したい場合
umask コマンド 実行する
8進数でマスク値で指定する。

シンボルでマスク値を指定する。シンボルは8進数に変換され後に各基本パーミッションから引かれます。

例2:ユーザごとにのデフォルトパーミッションを変更したい場合
変更したいユーザのホームディレクトリ/.bashrc のumask値を変更する。
変更前

変更
$vi ~/.bashrc で個人設定ファイルを開き、umask コマンドを追加して保存し、再度読み込む。

変更後
変更したユーザ(ユーザ名:linuc)のマスク値は0111に変更されているが、変更していないユーザ(ユーザ名:yoshioka)のマスク値は0022のままである。

例:3ユーザ全体のデフォルトパーミッションを変更したい場合
/etc/login.defs のumask値を変更する
変更前
$sudo vi /etc/login.defs

変更

変更後
すべてのユーザーのデフォルトパーミッションが0111に変更されている。(rootユーザのマスク値も変更になっているので使用する際は注意が必要だと思われます)

終わりに

自分がLinuxに苦手意識を持ったきっかけがこのパーミッションだったのですが、取り組んでみるとと理解できる部分が意外と増え苦手意識が少し薄れたと感じています。だれてしまわないように目標を設定して、Linuxやサーバ・インフラ関係のインプットとアウトプットを続けていきます!

3度目の基本情報技術者試験を終えて

2024年4月入社の吉岡です。今年の初めに入社して初めて案件にアサインして頂き、必死になっていたらいつの間にか春でした。右も左も分からない状態から少しずつ理解できることが増えるとやりがいを感じ、「もっと理解できることが増えたらもっと充実感を得られるだろう!」と思うようになりました。
そこで昨年度の目標であり未達成に終わってしまった基本情報技術者試験の取得に再度挑戦してきました。自分は情報処理系専門学校(夜間部)の2年次から資格取得に取り組んできましたので、2年間分の反省をしつつ基本技術者試験そのものについてと取得に向けてどのような取り組みをしてきたかについて記事にさせて頂きます。

基本情報技術者試験とは

ITを活用したサービス、製品、システム及びソフトウェアを作る人材に必要な基本的知識・技能をもち、実践的な活用能力を身に付けた者を対象とした国家試験です。基本情報技術者試験は情報処理技術者試験の試験区分のひとつであり、スキルレベル2に位置づけられています。ITの安全な利用を推進する情報セキュリティマネジメント試験(スキルレベル1)や応用的な知識・技能を測る応用技術者試験(スキルレベル3)、各分野の専門知識が問われる高度試験(スキルレベル4)があります。
下記に基本情報技術者試験の受験に関する情報をまとめておきます。

  • 受験に必要な資格はない
  • 比較的安価な受験料(税込7500円 2025/04/30 時点)
  • 通年で試験を実施されている(再受験の場合は前回の受験から30日後)
  • 試験方式は原則CBT方式(全国の試験会場を選択し会場のあるコンピュータ上で実施)
  • 科目A試験と科目B試験を同日受験しそれぞれ60%以上の得点で合格(科目A試験免除制度*を利用する場合を除く)
  • 試験終了後採点結果が画面に表示され、受験の翌月にIPAのウェブサイトに合格者が発表される
  • 取得後の更新期限がない

*科目A試験免除制度はIPA(情報処理推進機構)が認定した所定のカリキュラムの受講を修了し、かつIPAが提供する修了試験に合格することで科目A試験免除になります。この制度を利用することで科目A試験と科目B試験の同日受験をせずによくなりますが、カリキュラムの受講費用および免除試験の受験費用が掛かります。

試験内容について

〇科目A試験(90分 60問)
ITに関する幅広な知識を測る試験で、テクノロジ分野とマネジメント分野とストラテジ分野から計60問が出題されます。

  • テクノロジ分野(約70%)
    回線の使用率計算やビット計算などの基礎理論・コンピュータの仕組み・ネットワークの仕組みなどに関するITの仕組みや技術について問われます。
  • マネジメント分野(約10%)
    プロジェクトマネージメントやサービスマネジメント、システム監査などに関するプロジェクトやサービスのPDCAサイクルについて問われます。
  • ストラテジ分野(約20%)
    システム戦略や企業活動、法務などに関するITと企業の関わりについて問われます。

〇科目B試験(100分 20問)
アルゴリズム分野に関する問題が16問とセキュリティ分野に関する問題が4問出題されます。

  • アルゴリズム分野
    行うデータ操作についての説明がなされそれを実現するプログラムの穴埋めまたは処理後の結果について出題されます。
  • セキュリティ分野
    情報セキュリティの確保に関する問題が出題されます。

**2023年4月以降CBT方式となり出題された問題の公開がされなくなりました。2024年10月以降はシラバスが改訂され、情報セキュリティに関する用語(例 PCI DSSやSOC など)やビジネスインダストリに関する用語(例 生成AIやハルシネーション など)が追加され、出題範囲が広がりました。

試験対策について

〇科目A試験対策

対策テキストで内容をじっくり把握し、過去問道場で実際に出題された問題を解いて理解を深めていくやり方が効率的だと思います。
自分は最初に問題集付きの基本情報技術対策テキストを購入したのですが、学習を始めたころは説明が不足で理解するのに時間がかかり、学習を進めていくうちに内容が物足りないと感じるようになりました。説明に比重を置いている対策テキストをお勧めします。

加えて自分はITや情報処理についての知識不足ゆえに理解が進まない箇所が多くあったので、より広く浅く学ぶためITパスポートのテキストを購入して取り組みました。ITパスポートの取得をしてから再度基本情報技術者試験の対策テキストに取り組むとスムーズに内容を理解できるようになりました。基本情報の対策に取っつきにくいと感じている場合は、ITパスポートのテキストや過去問を参考にしてはどうでしょうか。

科目A試験は必要とされる知識の範囲が広いので学習しても忘れてしまう箇所が出てくると思いますが、何度も復習をすることが近道だと思います。自分はシラバスを単語帳代わりにたびたび復習を行うようになって知識が定着しやすくなったと感じました。(基本情報技術者試験(レベル2)シラバス)

〇科目B試験対策

  • アルゴリズム分野
    いかに素早く処理をトレースできるかが鍵です。説明文で「この値を操作を行ったらこういう結果になった」と示されていればそれをアルゴリズムにあてはめ、示されていなくても自分で値を設定してアルゴリズムを追いかけるやすくなります。
    科目A試験の範囲であるデータの構造(例 木構造、キュー、スタック など)やデータの操作方法(例 二分探索、バブルソート、逆ポーランド記法 など)の知識がないと解答時間が足りないと思います。逆にデータの構造やデータの操作方法ごとの特徴を知っていると、ほとんどトレースせずに解けてしまう問題もありました。
  • セキュリティ分野
    「こういうシステム体制の企業があり、どのようなセキュリティ対策がとれるか」のような出題のされ方が多く、科目A試験の知識があれば解答できる問題です。
    説明の文章は長めなので、先に問題文と選択肢を確認してから説明文を読むとキーになる箇所が確認しやすいと思います。また完全に自分の好みなのですが、セキュリティの問題を解いてからアルゴリズムの問題に解く方が心理的に楽でした。

自分の試験結果

1回目(入社前) 科目A:620点/科目B:410点/結果:不合格
2回目(昨年度) 科目A:550点/科目B:715点/結果:不合格
3回目(今年度) 科目A:810点/科目B:685点/結果:5月中旬結果公開

実際どのくらい実務に役立つか?

基本情報技術者試験の資格が直接実務の役立つ機会は少ないと思います。独占業務がなく取得者も多く実務にあたってより専門的な知識・技能を身に着ける必要があるからです。
資格取得そのものが目的というよりも、プログラマ・エンジニアとしての成長を加速させてくれる土台作りのために資格取得を目指すことは無駄でないと思います。実際に案件にアサインされるようになって「大まかに仕組みや流れがイメージできる!」「この部分が問題なのは…ここら辺がネックになっているのかな?」というような機会がありましたし、少なくとも根気強さは身につきました。

おわりに

ITや情報処理に触れはじめて3年が経ちました。何度も挫折をしつつ、いろいろな方の手助けしていただき励ましていただき何とかやっていけています。体力と単純記憶力があるうちに、応用的な試験やインフラに関するような知識・技能・資格を身に着けてより充実した日々を送っていきます!

2025年 新入社員ブログ 高田06 [MySQLバックアップ・リストア方法まとめ]

こんにちは、2024年4月に入社した高田です。
入社してから数ヶ月が経ち、社内研修を終えて、少しずつ実際の業務に携わるようになりました。最近は、実務の単体試験の一環としてMySQLのデータベース操作を行う機会があり、その中でデータベースおよびテーブルのバックアップとリストアを行いました。
今回は、MySQLのバックアップ・リストア方法について、手順やポイントを説明します。

MySQLのバックアップ方法

1. 単一のデータベースをバックアップ

以下のコマンドを使用すると、特定のデータベース全体をバックアップできます。
なお、「-h ホスト名」は、リモートサーバーに接続する場合に指定します。ホスト名が「localhost」の場合は、-h localhost を省略してもデフォルトで「localhost」に接続されます。


2. 特定のテーブルをバックアップ

特定のデータベース内の一部のテーブルのみをバックアップしたい場合は、以下のコマンドを使用します。


MySQLのリストア方法

バックアップファイルから特定のデータベースにデータをリストアする場合、バックアップファイルが単一のデータベース全体であっても、複数のテーブルを含む場合であっても、以下のコマンドでリストアできます。「-h ホスト名」については、バックアップ時と同様です。ホスト名が 「localhost」の場合は、省略してもデフォルトで「localhost」に接続されます。


実例

社内研修で使用した「laravelDB」というデータベースを使ってデータベースおよびテーブルのバックアップとリストアを実施します。
「laravelDB」データベースは「users」テーブルと「prefectures」テーブルの2つのテーブルを含んでいます。

データベースのバックアップ・リストア手順

1. データベースのバックアップ


2. リストア用のデータベース作成


3. データベースのリストア


以上の3ステップを実行すると、「laravelDB」データベースのバックアップデータを使用して、「laravelDB_restore」データベースに復元できます。復元後のデータベースには、バックアップ時点のデータやテーブル構造が再現されていることを確認できます。

テーブルのバックアップ・リストア手順

1. テーブルのバックアップ

2. リストア用のデータベース作成

3. テーブルのリストア


以上の3ステップを実行すると、「users」テーブルと「prefectures」テーブルのバックアップデータを作成し、新しく作成した「laravelDB_restore_tables」データベースに復元できます。データベース全体ではなく、特定のテーブルのみを対象としてバックアップ・リストアを行うため、復元後のデータベースにはバックアップしたテーブルのみが含まれ、それ以外のテーブルは存在しません。

まとめ

今回は、MySQLの基本的なバックアップおよびリストア手順について学びました。研修では、SELECT文、UPDATE文、DELETE文、CREATE文の使用方法を中心に学習しましたが、バックアップやリストアもコマンドを使用することで手軽に実行できると知りました。
本番環境のデータを扱う際には、事前にバックアップを取得し、万が一のトラブル時にも迅速にデータをリストアできるよう備えておくことが重要だと思いますので、今回学習した知識や技術をしっかりと整理し、必要なときに迅速に活用できるようにしていきたいと思います。

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 :よくある質問