LinuCの試験について

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

この間、Linux資格のLinuCを受験しました。
今回私が受けたのは、LinuCレベル1(101試験)になります。
この試験は、101試験と102試験があり、認定されるためには2試験を(片方を合格していたら5年以内に)合格する必要があります。

今回は、LinucCレベル1 101試験を受けた感想や試験の内容を簡単に書いていこうと思います。

Linux技術者認定「LinuC(リナック)」とは
クラウドやDX時代のITエンジニアに求められるシステム構築から運用管理に必要なスキルを証明できる技術者認定です。

・受験動機
この試験を受ける理由は、仕事に対する自信につなげられるようにするためと、これからの業務の役に立つと思い受験しました。

・予約と受験方法、前日までの準備について
今回はオンラインでの受験だったので、テストセンターでいかなくてよかったのですが、
試験を受けるにあたっての、本人確認書類の用意、受験スペース準備や規則などが大変でした。

・試験対策と試験概要
対策として、テキストでの学習や過去問を解くなどをしていました。一日に学習する範囲を決めてやったり、章まとめの問題集を何回も解きなおしていました。

LinuCレベル1(101試験)は試験時間は85分で出題数は60問でした。
以下は試験囲です。

第1章: Linuxのインストールと仮想マシン・コンテナの利用
第2章: ファイル・ディレクトリの操作と管理
第3章: GNUとUnixのコマンド
第4章: リポジトリとパッケージ管理
第5章: ハードウェア、ディスク、パーティション、ファイルシステム

・勉強してみた感想
Linuxのことを何もわからない状態からのスタートだったので、なんとなく理解するのにも時間がかかりました。
特にコマンドとそのオプションを覚えきれず、とても苦労しました。

・結果と感想
結果は残念ながら不合格でした。
1~5章の全範囲まんべんなく出ていたので、全体的に復習が必要だと思いました。
受験した感想といたしましては、どのような形で問題が出されるのかわからず、緊張して問題とくペース配分がうまくいかず、時間が掛かりました。
それによって見直しを行う時間がありませんでした。
また、第3章、第4章のコマンドを忘れていたり、コマンドは合っているのにオプションを間違えてるなどのミスが目立ちました。

今回の試験で自分の努力不足をとても感じました。次回受験する際には過去問やりこみ、解くスピードを上げて見直しをする時間を作りたいと思います。模擬試験で正解8割を安定して出せるようになってから再度、受験したいと思います。

現在は、ping-tというサイトを使って過去問を解いています。
このサイトは、試験範囲・問題数・出題形式まで自由に決めることができて便利です。
間違ってもわかりやすい解説があるので、おすすめです。(アカウント登録が必要です。)

https://mondai.ping-t.com/users/sign_in

いかがでしたでしょうか。

久しぶりのブログでしたが、よいネタを見つけたら投稿していきたと思います。

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

2023年 新入社員ブログ 松井(第4回)

こんにちは。入社1年目の松井です。
前回までの内容は下に貼っておきます!

第1回はこちらです!

第2回はこちらです!

第3回はこちらです!

今回の内容はLaravel演習です。演習の内容の前にLaravelとは何なのかについて簡単に説明します!

Laravelは、多くのWebアプリケーションの開発に使われているPHP言語で開発されたフレームワークです。そもそもフレームワークとは何なのかについて説明すると、プログラミングの作業を毎回0から書く必要がある内容を予め「枠組み」として纏められている仕組みです。その枠組みがあることで、新しいアプリケーションを作るたびに同じ機能を実装させるという手間を無くすことができます。

社内で行われたLaravel演習の内容は前回紹介したPHP演習と大差ないので、もう一度紹介しますね。演習課題はPHPと同じく「会員登録フォームの作成」です。主な実装内容は以下の通りです。

会員登録フォームの内容

  • 会員登録/ログイン機能の実装
  • 会員一覧機能の実装
  • 会員情報変更機能の実装
  • 会員削除機能の実装

PHPで苦労した内容がLaravelで簡単なコードで実現できることを体感することができました。例えばPHPでは、ログイン後のページ一つ一つにセッションをつけないと不正アクセスかどうか判別できませんでした。しかし、Laravelでは、ミドルウェアという機能を使って簡単にログインしているかどうかで処理を振り分けることができます。また、PHP演習で苦労したページネーション機能は一行で書けるようになります。下記にページネーション機能を実装するために書いたコードを抜粋します。

PHPのコード

PHPだと複雑なコードを書かない上に多くの行数を費やしてしまいます。コードを読んだことがない人にとってはコメントが無いと何を書いているのか非常に分かりにくいと思います。

Laravelのコード

このコードはPHPと比較して非常にすっきりとした印象を持てますね。Laravelだと細かい部分はフレームワーク側で処理してくれるからここまで簡単に書けるようになります。

Laravelで作成した一覧画面を下に貼っておきます。大まかな構成はPHP演習で作ったものとあまり大差ありません。

今回の内容はPHPで実装するに苦労したものがLaravelでは簡単に作れたという内容でした。
最後まで読んで頂き、誠にありがとうございました!

2023年 新入社員ブログ 松井(第3回)

こんにちは。松井です。
もう11月になって上着を着用してる人が増えてきましたね!

前回までの内容は下に貼っておきます!

第1回はこちら
第2回はこちら

第2回ではSQL演習について紹介しましたが、今回と次回でPHP/Laravel演習について紹介します。今回はPHP側の演習について紹介します。演習内容の前にPHPについて簡単に紹介します!

PHPとはWebページを作ることがサーバサイドのプログラミング言語です。HTMLやJavaScriptと混同されやすいです。HTMLやJavaScriptはブラウザ側(ユーザ側)で動かしていますが、PHPはサーバ側で動かしています。PHPを使う最大の利点はデータベースとの連携を容易に行えるということです。サーバ側で動かしているので、Webサイト上でよく見るデータのやりとりを実現できるということです。

PHP/Laravel演習の課題は「会員登録フォームの作成」です。主な実装内容は以下の通りです。

会員登録フォームの内容

  • 会員登録/ログイン機能の実装
  • 会員一覧機能の実装
  • 会員情報変更機能の実装
  • 会員削除機能の実装

基本的に上記の内容を実装するという内容ですが、ユーザにとって使いやすいように配慮することが大変でした。例えば間違えてページのリロードをしたら入力内容が全て消えてしまうという問題は「値を保持させないといけない」ということや必要です。また、誤って入力した内容が直ぐにデータベースに登録されるのを防ぐために「確認画面を作る」ことや登録したかどうか確認するために「完了画面を作る」機能も必要でした。機能作成の面で特に大変だったことは「ページネーション機能の実装」でした。実装するために多くの行数を書く必要があることやページを遷移することによって入力した値が保持できないといったバグを対処することがとても大変でした。作成した会員一覧ページはこのような感じです。

次回はLaravel演習について書きます。LaravelはPHPと比べ、複雑な機能を簡単に書けるという特徴を持っていますのでPHPとの違いについても紹介していきます!
最後まで読んでくれてありがとうございました!

2023年 新入社員ブログ 松井(第2回)

こんにちは。
入社1年目の松井です。
もう10月になって冷えてきましたね!

前回は外部研修について紹介しました。
「外部研修とは?」と思った方はこちらのURLに書いてありますので気になったら覗いてみてください!

https://blog-s.xchange.jp/archives/date/2023/08/03

内部研修の概要

6月から7月末にかけて内部研修を行いました。
内部研修の内容は以下の2つです。

  • SQL演習(6月中旬まで)
  • PHP/Laravel演習(6月下旬から7月末まで)

SQL演習

SQLの問題集を読み、演習問題を解きました。外部研修中ではなかなか問題を解く機会が少なかったので内部研修を通じてSQLの勉強をしました。内部研修に使った本はこの下にURLを貼っておきますので、気になった人は覗いてみてください!

https://book.impress.co.jp/books/1121101090

SQLでの勉強で難しかったところは副問い合わせでした。副問い合わせとは「他のSQL文の一部分として入っているSELECT文」です。特徴としては「検索結果に基づいて表を操作する」という点です。言葉だけだと分かりづらいので例を挙げます。

例:家計簿というテーブルから最も大きな出費を調べ、その費目と金額を求める

文章で書くと簡単に見えますが、SQLではそうはいきません。SQLでは「最も大きな出費を調べる」、「それを基に費目と金額を求める」の2つのステップが必要です。まずはステップごとのコードを書いてみます。

(1)で調べた値を基に費目と金額を求め、(2)で費目と金額を求めることができました。これだと(1)の値が急に変わったときに調べ直すのが面倒です。そこで、(1)のコードを(2)のコードに書いてある「(1)から書き写した値」に埋め込みます。

(3)では、(2)のWHERE句の中に(1)を埋め込みました。このようにすれば、(1)と(2)の動作を一括に実行でき、(1)で出力されるものが変わっても(2)を書き換える必要がなくなります。(3)のコードに入っている括弧の中身が副問い合わせということです。

このようにしてSQL文の意味や使い方について深く学んでいきました。

SQL演習についての話はここまでです。次回はPHP/Laravel演習について書きます。最後まで読んで頂き、誠にありがとうございました!

ヘルパー関数のあれこれ!紙屋03

おつかれさまです!
‘23年度入社の紙屋です!
9月に入って朝晩の暑さがすこーーしずつ和らいでいたような気がしますね。早く日中の暑さも和らいでいくといいですね。

8月で課題の会員登録のアプリケーションを作り終えました。
外部研修でもLaravelでwebアプリケーションをつくりましたが、そのときはとりあえずの実装を優先して、「この関数がどんな仕事をしているのか、どんな機能があるのか」ということを考えていませんでした。
そこで、今回はLaravelにおけるヘルパ関数に焦点をあてて振り返ろうと思います!

ヘルパ関数とは?
Laravelに搭載されている独自の関数のことで、いろいろなところで呼び出せる便利な関数です。

Laravelの公式ドキュメントをみえると数えただけで213個ありました(今回Laravel ver9で実装)。
まだまだ分からないことが多いので、今回は使ったものに触れながら振り返ります!
今回の会員登録フォームで使用したヘルパ関数は、
・view ・redirect ・route ・request ・session
・old ・dd ・dump ・config
でした。
Contollerや入力フォーム、処理の確認で使うものが多く、外部研修でも使っていたので、コードレビューいただく前から使っていました。しかし、config関数は教えていただいてからの導入でした。

よくアドバイスいただく内容として、同じコードで内容量が多く、その処理を複数個所で使用する場合は、可読性や再利用性を考えてコーディングした方が良いと教えていただきます。
今回config関数をどこに用いたかというと、formタグで会員情報の登録や編集を行う箇所でバリデーションを実装するときに、バリデーションの中身は同じものなので、バリデーション時にコードが冗長にならないように利用しました。

まずは、config関数の公式ドキュメントを確認します。
config関数は設定変数の値を取得します。設定値はファイル名とアクセスしたいオプションを「ドット」記法で指定します。
とあります。

となっており、「/config/(.phpファイル)」内に記述されている配列を呼び出します。
では、私はどのように実装したかというと、
Controller内には以下のように記述し、

「/config/mySetting.php」ファイル内に

と記述しました(教えてもらいながらですが…)。

これでバリデーションチェック時の項目をController内に何度も記述する必要が無く、バリデーション内容の変更・修正時も配列の中身を記述することでスッキリします。

ちなみに、ヘルパ関数がどんな処理をしているのかは、「/vender/laravel/framwork/src/illuminate/Foudation/helpers.php」ファイル内に記述してありました。

確かに配列があればキーを返してくれているみたいです。

ちなみに、今回使用した「ドット記法」についてちょっと触れると、配列からの値の取得時にキーを「.」でつなげることで、多次元配列の場合、より深い階層へネストし値を取得してくれます。
例えば、Arr:get()関数の公式ドキュメントを参照すると、

となっています。$arrayのような多次元配列から値を取得したい場合は、第2引数のキーの部分をドット記法で、欲しい値までネストしていきます。
ちなみにArr::get()関数に第3引数をセットすると、第2引数に指定したキーが存在しない場合の値を返してくれます。

改めて振り返ってみると、「なるほど!」と思いました!
今後も、いろいろと忘れないようにまとめていきたいと思います。
では、また次回!!


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などで動かす必要があるということがわかりました。

今後も業務で起こった出来事をブログにしていきたいと思います。

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

パスワードはハッシュ化する!!紙屋02

こんにちは!
’23年度入社の紙屋です!
日に日に暑さが増すなか、台風もやってきて大変ですね。
私は出身が鹿児島県なので台風には慣れっこです。
学生のうちは台風が来ると「学校が休みになるんじゃないか」とそわそわしていましたが、社会人になると「台風きたら出勤どうしよう…」と不安でそわそわしてしまいます(笑)

現在は、課題として会員登録フォームをPHPでの実装、その後フレームワークを使った実装がひと段落終えたところです。調べながら、分からないところが教えていただきながらの実装だったので、ちょっとずつまとめをしていこうと思います。

まずはとりあえず機能の実装を!と考え、新規登録フォーム、検索機能、編集・削除機能を実装しました。その中でセキュリティ対策への考えはまだまだ足りず、データベースへ登録する際に、エスケープ処理を行わなければならないことは覚えていましたが、パスワードに対しては何も処理をしていませんでした。
レビューいただいた際に、「え・・ハッシュ化って?」「まだ処理がいるの?」と混乱しました…。なので、今回はハッシュ化について調べてみました。

今回、PHPプログラミングで実装した内容は、

です。
最初は直観的に

をそのままDBに登録していました。

レビューいただいた際に、このままでは、DBを攻撃された場合、個人情報が盗まれてしまう危険性があると教えていただきました。

確かに!ログイン情報を盗まれてしまったらなりすましなんて簡単にできますね。

password_hash関数をマニュアルで調べてみると、


◦$passwordには登録するパスワードの値が入って、
◦$algoにはハッシュ化に使用するパスワードアルゴリズム定数が入って、
◦$optionsには各アルゴリズムがサポートするオプションが入る
とのこと!

アルゴリズム定数のPASSWORD_BCRYPTを使うと
◦”$2y$” crypt フォーマットを使ったハッシュになる
◦長さは常に 60 文字
◦オプションのcostは省略時はデフォルトの10が入り、ハードウェアの性能が許容できるなら高くも設定可

とのことでした。
上記のpassword_hash()関数で登録しなおすことで、

ちゃんとハッシュ化されていました。
これで一安心です!

知らないことが多くて調べて、コーディングして、エラーと闘う日々です。
今後も、いろいろと忘れないようにまとめていきたいと思います。
では、また次回!!

WordPressのデフォルトアバターが表示されない(404エラーになる)問題

WordPressでデフォルトのアバターを表示させると、以下のようなGravatarのURLを生成します。

https://secure.gravatar.com/avatar/?s=60&d=mm&r=g

このURLが2023年8月9日現在404エラーとなっています。

次のようにパラメータの順番を変更すると正常に表示されます。

https://secure.gravatar.com/avatar/?s=60&r=g&d=mm

さすがにこれが仕様ということは無いと思うので、何かしら不具合が発生していると思われます。

Gravatarにお知らせしたいのですが、不具合を報告したり、お問い合わせするようなフォームが見つけられなかったので諦めました。

Gravatarの中の人ー!見てたら直してくれー!

Workaroundとしては、WordPressが生成するURLのパラメータを並べ替えることが考えられます。

以下のようにURLの生成箇所に用意されているフィルターでパラメータを並べ替えればよいでしょう。

Gravatarが修正されるまでの一時的な物なのでプラグイン化するほどではないかなと思います。

お使いのテーマのfunctions.phpに入れればよいのではないでしょうか。

2023年 新入社員ブログ 松井真治(第1回)

こんにちは!
2023年4月に入社した松井真治です。

自己紹介


入社する前は工学系の大学でコンピュータについて学んでいました。
プログラミングは勿論、コンピュータに関する幅広い範囲を学んでいました。
卒業研究では、「オセロにおけるDueling Networkを用いたQ-learningの効果検証」をテーマにしました。初めて聞くワードが出てきて困惑している人が多いと思いますが、平たくいうと機械学習に関する研究をやっていました。そんな情報系の出身の私ですが、web系は未経験です。

外部研修

私は、4月中旬から5月末までの間外部研修に行ってきました。研修の間で学んだことは以下の通りです

  • IT基礎
  • Linux
  • プログラミング基礎(HTML,CSS,Javascript)
  • データベース(MySQL)
  • PHPプログラミング
  • Laravel
  • git
  • システム開発演習

IT基礎では、これからITで働くにあたって最低限覚えないといけない(それどころか基礎教養として重要)ことについて学びました。日常でも使う単語が多く、ITに関わっていなかった人たちでもわかるような内容でした。

Linuxでは、私たちが当たり前のようにできているファイルの作成やフォルダーの作成などをコマンドを使って行ったり、ファイルのアクセス権限の変更を行いました。GUIだと面倒なことをコマンドでできるのは便利ですね!

プログラミング基礎では、私たちがよく見るWebサイトの基本的な作り方について学びました。書いたサイトのコードは検証ツールで見れますので、外部に公開するときは注意が必要ですね!

データベースでは、データの検索からテーブル・データベースの操作を行いました。IDやメールアドレスといった重要な情報を入れるので、万が一のことがあったら大惨事です。データが破損したり、誤ってテーブルに入っている情報が全て消してしまったことありましたので、慎重に扱わないといけないことを学びました。

PHPプログラミングでは、PHPを用いて値を次のページに保持させたり、データベースへの干渉を行ったりしました。同じWebに関するプログラミング言語でもJavascriptとの違いをあげるとしたら、PHPはブラウザ側ではなく、サーバ側に干渉する言語であるということですね。また、PHPではデータベースと連携することができますが、非常に難しかったでした。

Laravelでは、Webアプリケーションのフレームワークとは何かから始まり、Webアプリケーションの作成を行いました。よく使われている処理をフレームワークとして統一できれば非常に便利ですね!そんなフレームワークの一例としてLaravelを使いました。例えばデータベースとの連携をLaravelで簡単に実現できるというのは大きなメリットです。しかし、研修の間で全て覚えることは難しく、概念しか覚えることしかできませんでした(笑)

gitでは、複数人で作業を分割して統合していくような際に使うことでバージョンの管理や不具合の発見についてわかりやすくするものといった内容でした。共同でシステム開発をする際に便利ですね!

最後に他社の方々と10日間という短い期間でシステム開発演習を行っていきましたが、私のグループは4人で教科書売買システムのWebアプリケーションを作るといった内容でした。3日間で設計、5日間でWebアプリケーションの作成、2日間で作成したアプリケーションについての発表の準備を行いました。多くのエラーやバグと立ち向かい、講師からの丁寧なアドバイスや解説のおかげもあり、無事Webアプリケーションを作ることができた他、Laravelのコードの書き方やgitの使い方について理解することができました。最終的に問題なく発表を行うことができ、研修を終わらせることができました!

本日はここまでです。
次回は内部研修について書きます。
最後まで読んで頂き、誠にありがとうございました!

Linux学習についてのまとめ 01

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

最近はLinuxの資格であるLinuCを受験するために、Linuxの学習をしています。
今回は復習も兼ねて学習したもの、実際に使ったものの一部を紹介したいと思います。

 

shutdownコマンド
私が最初に覚えたコマンドで、システムを安全に停止するコマンドです。

12:00に時間指定でシャットダウンする場合

[crayon-673ed1db70ff8087402906  ]shutdown -h 12:00[/crayon]

すぐに再起動する場合

[crayon-673ed1db70ffe195608311  ]shutdown -r now[/crayon]

私がこのコマンドを使うときは、オプションの-rをよく使います。

書式 shutdown [オプション] 時間 [メッセージ]

オプション
-h  シャットダウンする
-r  シャットダウン後に再起動

 

cpコマンド
ファイルやディレクトリをコピーするコマンド。
業務では、WinSCPなどで追加したVMの共有フォルダからファイルをコピーするとき以下のようなコマンドでファイル情報を保持するオプションをつけ実施しました。

[crayon-673ed1db71002459831376  ]cp -rp vagrant/html/* /var/www/html[/crayon]

書式 cp [オプション] コピー元ファイル名 コピー先ファイル名
   cp [オプション] コピー元ファイル名 コピー先ディレクトリ

オプション
-f  コピー先に同名のファイルがあれば上書きする
-i  コピー先に同名のファイルがあれば上書きするかどうか確認する
-p  コピー元ファイルの属性(所有者、所有グループ、アクセス権、タイムスタンプ)を
   保持したままコピーする

 

chownコマンド
ファイルに設定されている所有者を変更するコマンド。
業務ではApacheを起動する際、所有者が違ったのでオプションの-Rを使って対象ディレクトリの全ファイルの所有者を変更しました。

[crayon-673ed1db71006843357407  ]chown -R root vagrant[/crayon]

書式 chown [オプション] ユーザー [:グループ] ファイル名やディレクトリ名

オプション
-R  指定したディレクトリとその中にある全ファイルの所有者を変更する

 

lsコマンド
ディレクトリを指定した場合は、そのディレクトリ内のファイルを表示します。ファイル名を指定した場合は、そのファイルの属性を表示します。何も指定しない場合は、カレントディレクトリ内のファイルを表示します。ドットファイルも参照したかったため、以下のようなコマンドを実行して確認しました。

[/crayon]

書式 ls [オプション] (ファイル名あるいはディレクトリ名]

オプション
-l  カレントディレクトリにあるファイルの詳細設定を表示
-A ドットファイルも含めて表示。ただし./ および ../ をのぞく
-a  ドットファイルも含めて表示。

 

grepコマンド
ファイルやテキストの中に、 正規表現によって表される検索文字列があるかどうかを調べます。引数にファイルを指定した場合、そのファイルの中で検索パターンにマッチした文字列が含まれる行をすべて表示します。


オプションの-nをつけることで、自分の探している文字が何行目にあるかを確認することができます。

書式 grep [オプション] 検索パターン [ファイル名]

オプション
-n  検索結果とあわせて、行番号も表示する

 

いかがでしたでしょうか。

LinuCは、試験レベルが3つありレベル1の試験は、「101試験」と「102試験」の2試験に合格するとレベル1合格になります。Linuxの復習しながら、ブログの続きとしてを出していけたらと思います。

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