WSLに置いたdevcontainer.jsonからJetBrains devcontainerを起動する

弊社ではPHPによる開発で使用するIDEはPhpStormが標準となっています。

PhpStormも今どきの流行かdevcontainer対応されており、されているからには使いたいと思うのですが、欲しい機能が無かったり期待した通り動かなかったりということが稀によくあるため、使う側が気を使って工夫してあげる必要があります。

今回はその中の1つ
「WSL上に配置したファイル(プロジェクト)からのdevcontainer起動が正常に行えない」
という問題の回避方法が分かったので共有しておこうという趣旨です。

公式に対して報告されている不具合としてはこれにあたると思われます。
https://youtrack.jetbrains.com/issue/IJPL-65925

そろそろ直りそうな気配もあり、直ったらこの記事も不要になるのですが、それならそれで喜ばしいということで。
(現時点の最新バージョン2025.1では直っていない)

結論から書きますと「devcontainer.jsonでworkspaceMountを指定する」となります。

以下は結論に至る経緯です。

Jetbrains devcontainerでは以下の2通りの方法でdevcontainerを作ることが出来ます。

  • ローカルプロジェクトから作成
    • ホスト機に置かれたファイル(devcontainer.json)を使って起動。
  • VCSプロジェクトから作成
    • VCS(Git)に置かれたファイル(devcontainer.json)を使って起動。
      • 実際の動作としては、使うファイルだけテンポラリディレクトリにcloneされてそこから起動される
    • 起動時にDocker volumeが作成され、そこにIDEが開く対象としてGit cloneされる

ただ、現状「VCSプロジェクトから作成」が以下のような点により使いにくいです。

  • Git cloneした内容がホスト機から直接見られない
    • HTMLやMicrosfot officeのドキュメントを入れてたりすると見られない
  • Git cloneした内容が複数のコンテナで共有できない
    • 専用のランダムな名前のDocker volumeが作成されるので、予めcompose.ymlで指定しておくということが出来ない
    • 静的なファイルだけWebサーバのコンテナで配布するとか、Javascriptは別コンテナのnodeで動かすといったことが出来ない
  • Dockerで使用する設定ファイルをBind mountしにくい
    • devcontainerが使用するファイルだけテンポラリディレクトリにcloneされるのでローカルで一時的に変更を試すといったことが出来ない

であれば「ローカルプロジェクトから作成」を使おうという話になりますが、この時「ローカルプロジェクト」がWSLに置いてあると正常に動作しないという問題にあたるわけです。(Windowsに置いてあれば問題なく動作するが、Dockerのディスクアクセス速度の都合でWSL上に置きたい)

状況を確認するために、以下のファイルを使用します。

\\wsl.localhost\Ubuntu\home\kurosawa\devtest.devcontainer\devtestdevcontainer.json

\\wsl.localhost\Ubuntu\home\kurosawa\devtest.devcontainer\compose.yml

このdevcontainer.jsonを使いdevcontainerを起動すると、IDEからディレクトリの中身(\\wsl.localhost\Ubuntu\home\kurosawa\devtest)が見えません。

Docker inspectでMountsを確認すると以下のようになっています。

Docker単体であればWSLに置いても特に問題なくマウント出来たはずなので確認します。

compose.ymlにvolumesを追加。

docker composeを使って直接起動します。

問題なくディレクトリ(\\wsl.localhost\Ubuntu\home\kurosawa\devtest)の中身が確認出来ます。

Docker inspectでMountsを確認すると以下のようになっています。

これらを見るに以下のような状況と思われます。

  • Dockerはスラッシュ区切りのパスがうまく認識できない
  • Dockerはバックスラッシュ区切りのパスは正常に認識できる
  • devcontainerから起動するとスラッシュ区切りのパスでマウントされる

compose.ymlを上記のまま、devcontainerから起動すればよいのでは?と思いましたが、スラッシュ区切りのパスでマウントされてしまいます。

それならばとcompose.ymlでバックスラッシュ区切りのフルパスを指定してみますが、相対パスで指定した場合と同じでスラッシュ区切りのパスでマウントされます。

では、バックスラッシュ区切りのパスにするにはどうしたらいいかというと、devcontainer.jsonのworkspaceMountで指定します。

compose.ymlのvolumesは不要なので削除します。(書いてもdevcontainer.jsonの設定で上書きされる)

workspaceMountで指定すると、バックスラッシュのパスでマウントされます。

workspaceMountは相対パスで指定しても大丈夫です。
devcontainer.jsonを共有することを考えるとこちらの方がよいでしょう。
マウント先のパスを変更することも出来ます。

devcontainerは指定したcompose.ymlをそのまま使うわけではなく、devcontainerの動作用に改変して使用します。

挙動からの推測になりますがその改変処理時に、compose.ymlのvolumesに書いたパスはdevcontainerが一旦解釈して、結果スラッシュ区切りのパスになりdevcontainer.jsonのworkspaceMountはdevcontainerが解釈せずそのまま使われる。ということなのだと思います。

[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年が経ちました。何度も挫折をしつつ、いろいろな方の手助けしていただき励ましていただき何とかやっていけています。体力と単純記憶力があるうちに、応用的な試験やインフラに関するような知識・技能・資格を身に着けてより充実した日々を送っていきます!

【参加レポート】4/10開催のAWSセミナーに参加しました!

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

今回は、4月10日に行われたAWSのオンラインセミナー(AWSome Day Online Conference)に参加しました。AWSの資格取得を考えていた私にとって、AWS の基礎やクラウドの全体像を学べる非常に貴重な機会となりました。今回は、セミナーがどのような内容だったか紹介したいと思います。

AWSの概要

セミナーの冒頭では、AWSとは何かという基礎的な部分から始まりました。
AWSは、Amazonが提供するクラウドサービスで、世界中で数百万以上のユーザーに利用されているとのこと。サービスの種類は200以上あり、Webアプリケーションのホスティングから機械学習、ビッグデータ分析まで、あらゆるニーズに対応しています。

クラウドの大きなメリットは、従来のように物理サーバーを購入・構築する必要がなく、必要なときに必要なリソースをすぐに使い始められるという「オンデマンド性」と「スケーラビリティ」です。導入コストや運用コストを抑えつつ、ビジネスのスピード感にも対応できる点が、クラウドが選ばれる理由だと感じました。

セミナーでは、続いて各サービスについての説明がありました。

ストレージ

AWSには多様なストレージサービスがありますが、主なものは、以下の3つ。

  • Amazon S3(Simple Storage Service)
    オブジェクトストレージの代表格で、耐久性99.999999999%(イレブンナイン )を誇ります。ログの保存、画像・動画の保存、バックアップ用途など、多様な使い方が可能です。
  • Amazon EBS(Elastic Block Store)
    EC2のインスタンスに接続して使うブロックストレージ。高性能なI/Oが必要なワークロードに最適です。
  • Amazon EFS(Elastic File System)
    複数のインスタンスで共有できるネットワークファイルシステム。Linuxベースのアプリケーションでよく使われます。

データベース

マネージドサービスとして提供されるAmazon RDSでは、MySQL、PostgreSQL、Oracle、SQL Serverなど複数のDBエンジンがサポートされています。バックアップやパッチ適用などの運用作業を自動化することができ、便利な機能がたくさんありました。

また、NoSQL型のAmazon DynamoDBも紹介され、レスポンスタイムが非常に高速で、柔軟なスケーリングが可能な点が魅力だと感じました。リアルタイムに大量なデータを扱わないといけない場合に活用したいと思いました。

ネットワークとセキュリティ

AWS上のネットワーク設計には、VPC(Virtual Private Cloud)という概念があります。これは自分専用の仮想ネットワークを構築するようなもので、プライベート/パブリックサブネットの設計や、ルーティング、NATゲートウェイなど、細かなネットワーク設計が可能です。

セキュリティ面では、IAM(Identity and Access Management)が重要な役割を担っており、ユーザーやロールごとに細かな権限設定が行えますまた、ファイアウォールのような役割を持つセキュリティグループや、アクセスを制限するネットワークACLの存在も紹介されました。

特に印象に残ったのが、「セキュリティはAWSとユーザーで責任を分担する」という責任共有モデルです。AWSはインフラのセキュリティを提供し、ユーザーはOS・ミドルウェア・アプリケーションレベルでのセキュリティ対策を行う必要がある、という考え方は、今後のクラウド設計において必須の知識だと感じました。

AWSのAIサービスについて

セミナーでは、AWSが提供するAIサービス群についても紹介されましたが、ここではその中でも特に注目したいサービスをいくつか掘り下げてご紹介します。

Amazon Rekognition(画像・動画解析)

Amazon Rekognition は、画像や動画の中に含まれる情報を高精度で分析できるサービスです。使い方はとてもシンプルで、画像や動画をアップロードし、API経由で解析を依頼するだけで行うことができます。セミナーでは、以下のような機能の紹介がありました。

  • オブジェクトとシーンの検出
    画像内に写っている「人」「自動車」「建物」「屋内」「屋外」など、さまざまなオブジェクトやシーンを自動で検出できます。
    例えば、防犯カメラの映像から不審な動きを検知したり、メディア業界でタグ付けを自動化したりといった使い方が可能です。
  • 顔分析と顔認識
    顔の位置、表情(喜び・怒り・驚きなど)、年齢の推定、性別などの顔の特徴を詳細に分析できます。また、顔認証のように同一人物かどうかの比較も可能です。
    これにより、出入管理システムや顧客体験のパーソナライズにも活用が期待できます。

Amazon Comprehend(自然言語処理)

Amazon Comprehendは、自然言語処理(NLP)に特化したサービスで、テキストデータから感情分析やキーフレーズの抽出、言語の判定などを行うことができます。

  • 例:カスタマーサポートのチャットログから、顧客が「満足している」「怒っている」といった感情を分析することができ、対応の改善につながります。

Amazon Polly(テキスト読み上げ)

Amazon Pollyは、テキストを自然な音声で読み上げるTTS(Text-to-Speech)サービスです。

  • 文章を入力すると、40以上の言語・70以上の音声で発音してくれるため、ナレーションの自動生成や、読み上げ機能のあるアプリに最適です。

Amazon SageMaker(機械学習モデルの構築・運用)

Amazon SageMakerは、より本格的に機械学習モデルを開発したい人向けのフルマネージドサービスです。

  • データの準備からトレーニング、デプロイまでを一括で行うことができ、Jupyter Notebookも統合されており、手軽に始められます。

これらのAIサービスの強みは、高度な技術をAPI一つで使える手軽さにあります。機械学習や画像処理といった分野に敷居の高さを感じていた人でも、AWSを使えばすぐに試せる環境が整っているのはとても心強いと感じました。

AWSの無料利用枠について

そして、何よりAWSには、初心者が気軽に始められるよう「無料利用枠(Free Tier)」が用意されています。これはAWSの多くのサービスを一定期間・一定の条件下で無料で試すことができる仕組みです。

【無料利用枠の種類】

  1. 12か月間無料
    アカウント作成から12か月間、以下のような代表的なサービスを無料で使えます。
  • Amazon EC2:Linux/Windowsインスタンスを月750時間(t2.microまたはt3.micro)まで無料
  • Amazon S3:月5GBまでのストレージ使用が無料
  • Amazon RDS:MySQL、PostgreSQLなどのデータベースが月750時間無料
  1. 常時無料(Always Free)
    一部のサービスは期間に関係なく無料枠が継続して利用できます。
  • AWS Lambda:月100万リクエスト、40万GB-秒まで無料
  • Amazon DynamoDB:25GBのストレージ、毎月25ユニットの読み書きキャパシティが無料
  • Amazon CloudWatch:基本的なモニタリング機能を無料で使用可能
  1. トライアルベースの無料枠
    特定のサービスに限り、試用期間中に無料で利用できる枠が提供される場合があります。

【活用時の注意点】

・AWS公式の「コストエクスプローラー」や「料金アラート」を使えば、使いすぎを事前に防ぐことができます。

・料金発生を防ぐためにも、利用量のモニタリング無料枠超過のアラート設定は忘れずに行うことが大切です。

これまでのインフラとこれからのインフラ

セミナーを通して一番印象に残ったのは、「インフラ基盤の在り方が根本から変わっている」ということ。

  • これまでのインフラ
     物理サーバーを自社で購入・設置・運用。時間もコストもかかる。拡張も大変。
  • これからのインフラ
     クラウド上で数クリックで構築。必要な分だけ使って、すぐスケール。グローバル展開も簡単。

例えるなら「家を建てる」のと「ホテルを借りる」くらいの違いがあります。自分のやりたいことにフォーカスし、インフラはAWSに任せるという発想が、これからのエンジニアには欠かせないと感じました。

おわりに

今回のAWSセミナーは、自分にとってまさに「クラウドの扉を開く」きっかけとなりました。難しそうに見えたクラウドも、しっかりと学べば確実に理解でき、資格取得や実践的なスキルアップにもつながります。

今後は無料利用枠を活用して実際に手を動かしながら、AWS認定資格(特にクラウドプラクティショナー)にもチャレンジしたいと思います。そして、ローカル環境だけでなく、クラウドでもインフラを設計・運用できるようになることで、エンジニアとしてのスキルの幅をもっと広げていきたいと思います。

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

Linux学習についてのまとめ 04        リポジトリとパッケージ

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

前回はLinuC101試験に向けての学習の一環として、ファイルシステムについての記事を作成しました。今回はリポジトリとパッケージについての内容をまとめました。この記事を通じて、リポジトリとパッケージの基本的な内容、設定に使用される一部コマンドをまとめましたので共有します。

リポジトリとは?

リポジトリは、ソフトウェアパッケージを保管し、管理する場所です。リポジトリを利用すると、ソフトウェアを簡単に検索・インストールできます。多くのLinuxディストリビューションでは、公式リポジトリが提供されており、信頼性の高いソフトウェアを利用できます。

リポジトリの種類

  • 公式リポジトリ: ディストリビューション提供元が管理する信頼性の高いリポジトリ (例: Ubuntuのmain, universe)。
  • サードパーティリポジトリ: 外部の開発者や組織が提供するリポジトリ(例: EPEL, PPA)。公式リポジトリにはないソフトウェアが含まれることがあります。
  • ローカルリポジトリ: ネットワークを使わず、ローカルで管理されるリポジトリ。

パッケージ管理システム

Linuxでは、ディストリビューションごとに異なるパッケージ管理システムが使われます。以下は主要なパッケージ管理システムです。

ディストリビューションパッケージ管理システム
Debian系 (Ubuntu等)APT (dpkg)
Red Hat系 (RHEL, CentOS等)YUM / DNF(rpm)
Arch系Pacman

パッケージのインストール・削除

APTを使ったパッケージ管理(Debian系)

パッケージのインストール

これにより、システムにvimがインストールされ、vimコマンドでエディタを開けるようになります。

パッケージの一覧表示

このコマンドを使用すると、現在インストールされているすべてのパッケージを確認できます。

パッケージの削除

removeはソフトウェア本体のみを削除し、purgeは関連する設定ファイルも含めて削除します。

YUM/ DNF(rpm)を使ったパッケージ管理(Red Hat系)

yumとdnfの違いについて

yum(Yellowdog Updater, Modified)は、Red Hat系のディストリビューション(RHEL, CentOS, Fedoraなど)で長年使用されてきたパッケージ管理ツールです。
dnf(Dandified YUM)は、yumの後継として開発され、yumよりも高速でメモリ使用量が少なく、依存関係の処理が改善されたパッケージ管理ツールです。

 yum の基本的なコマンドは dnf でも使えますが、一部オプションが異なります。また、新しい環境では dnfを使うのが推奨されます。

パッケージのインストール

yumまたはdnfを使用すると、依存関係も解決して自動的に関連パッケージをインストールしてくれます。

パッケージの一覧表示

このコマンドを使用すると、現在インストールされているパッケージのリストを取得できます。

パッケージの削除

このコマンドを実行すると、指定したパッケージが削除されます。YUM/DNFは依存関係の整理も行うため、注意が必要です。

パッケージの検索

APTを使った検索(Debian系)

パッケージ名を検索

searchを使うことで、vimという名前を含むすべてのパッケージを検索できます。

パッケージ内のファイル検索

このコマンドを使うと、/usr/bin/vimを提供しているかを調べることができます。

インストール済みのパッケージを確認

このコマンドは、インストール済みのパッケージ一覧を表示し、 grepで特定のパッケージを検索できます。

YUM/DNFを使った検索(Red Hat系)

特定のファイルを含むパッケージを検索

searchを使用すると、指定したキーワードに関連するすべてのパッケージを一覧表示できます。

パッケージ内のファイル検索

providesを使用すると、特定のファイルがどのパッケージに含まれているかを調べることができます。

インストール済みのパッケージを確認

このコマンドを使用すると、システムにインストール済みのパッケージを確認できます。

リポジトリの追加と管理

リポジトリを追加することで、公式リポジトリにはないソフトウェアをインストールできるようになります。

APTでリポジトリを追加する(PPAの例)
YUM / DNFでリポジトリを追加する(EPELの例)

EPELはRed Hat系の拡張リポジトリで、多くの追加パッケージが含まれています。

おわりに

今回の記事では、リポジトリとパッケージ管理の基本についてまとめました。Linuxのパッケージ管理はシステムの運用に欠かせない重要な知識です。リポジトリの理解と適切なパッケージ管理を行うことで、安全で効率的な環境を構築できます。

LinuC 101試験に向けて、基本的なコマンドをしっかりと身につけ、試験に備えたいと思います。

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

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

テストの基本の”き”をおさえよう!

’23年度入社の紙屋です!
本年度は単体テストに対して理解を深め、成果物のクオリティを担保するという点を目標の一つとして業務に取り組んでまいりました。
リリース前にテストを行い、早期に不具合を発見することもできましたが、テスト内容の不十分さや検証環境へリリース後、お客様からのご指摘で不具合を発見するなどの反省点もありました。
テストを行うための心構えとして備忘録的にまとめようと思います!

テストの目的と重要性

  • バグの早期発見と修正が可能
  • プログラマーの心理的安全性を保つ
  • 機能改修時の予期せぬエラーを防ぐ
  • コードの挙動理解を助ける

テストの考え方

  • FeatureとUnitに分けて管理することが多い
    * Feature(機能)テスト:
    ユーザー目線のテストです。
    より大きい範囲で行い、アプリケーションに求められる機能を確認します。
    * Unit(単体)テスト:
    プログラマ目線のテストです。
    より小さい範囲で行い、各パーツごとにエラーがないかを確認します。
  • ブラックボックステスト、ホワイトボックステストの目的を意識する
    * ブラックボックステスト:
    システムの外部から機能や仕様を検証します。
    システムが仕様通りに動作するか、画面レイアウトや使いやすさを評価することに重点を置きます。
    * ホワイトボックステスト:
    内部のコード構造や処理フローを検証します。
    内部ロジックのの正確性を評価します。

テストの作成

テストの作成から実行方法までLaravelを使用した方法でまとめようと思います。

  • テスト作成のコマンド:

    上記コマンドはFeatureテストとして作成されます。
    もしもUnitテストとして作る際は、オプションを付けましょう。


    * ファイル名は通常 ‘XxxxTest.php’ の形式を指定します。

テストケース名には必ず「test」と入れ、「test***」とテスト名と条件なども記載します。

テストコードの構造

テストコードは以下のような形をとります。

setUp や tearDown はテストケースの事前・事後処理を行います。
* setUp:事前処理(変数の初期化やデータの準備など)
* tearDown:事後処理(不要なデータの削除など)
* setUpやtearDownを書く際は、メソッドの戻りと指定 ‘: void’ も忘れずに書くことが必要です。

アサーションについて

プログラミングのデバッグやテストのために用いられる方法の1つです。
以下のような働きをします。

  • テスト結果を即座に確認できる
  • テストが意図した通りに動作したかを検証できる
  • テスト条件が妥当なデータかを判断できる
  • テストが失敗した要因を特定しやすい

アサーションメソッドは主に以下のようなものがあります。

  • assertTrue:実測値がtrueであることを期待
  • assertFalse:実測値がfalseであることを期待
  • assertEquals:実測値と予測値が一致することを期待
  • assertSame:実測値と予測値が型も含めて一致することを期待
  • assertEmpty:中身が空であることを期待
  • assertNotEmpty:中身が空でないことを期待
  • assetStatus:アクセス結果のステータスコードを確認
  • assertRedirest:アクセス後、どこにリダイレクトされるかを確認
  • assertSee:レスポンス内に特定の文字列が存在することを確認

テストの実行方法

  • 全てのテストを実行する場合
  • フォルダを指定してテストを実行する場合(例:フォルダ名tests/Feature)
  • ファイルを指定してテストを実行する場合(例:ファイル名ExampleTest.php)
  • メソッド名を指定してテストを実行する場合(例:メソッド名testExample)

テストコード作成のポイント

  1. テストメソッドは簡潔に保つ
    呼ばれるアサーションを条件分岐してしまうと、一貫したテスト結果が得られなくなる可能性があります。結果が数パターンある場合は、愚直にそのパターン数分テストを準備する必要があります。
  2. 必ず通るテストを書く(時間依存や確率的要素を避ける)
  3. ダミーデータは実際の内容に近い内容にする
    データはより正確な方が本番環境に近い挙動のテストを行うことができます。
  4. テスト対象となるロジックはシンプルにする
    複雑な条件になりそうな場合はメソッド化して対応します。そのほうがテストケースも少なくて済むことがあります。
    ロジックはネスト構造を複数持たないよう心掛け、アーリーリターンを設けるなど対応します。
  5. 3つのAを意識する
    〇 Arrange(準備):テストを行うにあたっての必要な準備段階のこと
    〇 Act(実行):準備したデータを元にアクションを起こすこと
    〇 Assert(検証):アクション後に期待する結果になっているか検証すること
    上記3つのAを意識してテストを行います。

以上がテストについての基本になります。
単体テストを適切に実施することで、コードの品質向上とメンテナンス性の改善につながります。
なかなか時間が十分にとれず、また、多数存在する条件の洗い出しもできないとシステムの品質を担保することは難しいです。
先日参加したPHPカンファレンスでもテストの重要性に触れ、テストを書く習慣をつけ、継続して改善、向上していくように意識するようになりました。
開発に時間がかかりがちですが、テストの時間も十分に設け、自分へのフィードバックも兼ねて今後も取り組んでいきたいと思います。
日々の取り組みを重ね、また理解が進んだ段階でアウトプットできればと思います!

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