PHPでの配列の取り扱いについて

【PHPでの配列の取り扱いについて】

最近、配列を使っているときになんとなくで実装してるなと思ったので、ちゃんと理解するためにまとめていきたいと思います。

目次
――――――――――――――――――――――――――――
1 配列
2 連想配列(多次元連想配列)
3 比較表
4 まとめ
――――――――――――――――――――――――――――

1.配列
・添え字が数字
・0から始まって要素が増える毎に添え字の数字も1増える

# 初期化
$配列名 = [値1, 値2, 値3];
# 要素の追加
$配列名[] = 値;
# 要素にアクセス
$配列名[キー番号];

2.連想配列(多次元連想配列)
・添え字を自由に決められる配列

# 初期化
$配列名 = [
キー1 => 値1,
キー2 => 値2 ...
];
# 要素の追加
$配列名[キー名] = 値;
# 要素にアクセス
$配列名[キー名];

3.比較表
・それぞれの動きを表にまとめてみました。

コード 配列 連想配列 多次元連想配列
in_array 〇 〇 〇
array_key_exists 〇 〇 〇
array_merge 〇 〇 〇

4.まとめ
配列はちゃんと理解して使うに越したことはないですね。
以上で、「PHPでの配列の取り扱いについて」でした~

たった1行でローディングアニメーションが実装できるCSSジェネレーター

HTML1行だけで、様々なローディングアニメーションを実装できるCSSジェネレーターを紹介します。
⇒CSS Loaders

よくありそうなシンプルなものから、CSSだけで表現されているとは思えない複雑なものまで、バラエティ豊かに用意されています。

使い方はとても簡単。
HTMLはたった1行です。

<div class="loader"></div>

 
cssは対象をクリックしてコピペするだけ。

中身はこんな感じ。

.loader {
  width: 50px;
  --b: 8px;
  aspect-ratio: 1;
  border-radius: 50%;
  background: #514b82;
  -webkit-mask:
    repeating-conic-gradient(#0000 0deg,#000 1deg 70deg,#0000 71deg 90deg),
    radial-gradient(farthest-side,#0000 calc(100% - var(--b) - 1px),#000 calc(100% - var(--b)));
  -webkit-mask-composite: destination-in;
          mask-composite: intersect;
  animation: l5 1s infinite;
}
@keyframes l5 {to{transform: rotate(.5turn)}}

 
CSSなので、色を変えるのも簡単です。

AWSの機能について調べてみた

【AWSの機能について調べてみた】

 

 

今回は、awsって沢山のサービスを提供しているということを知ったので、一部ではありますが、機能をまとめていこうと思います。

目次
――――――――――――――――――――――――――――
1 AWSとは
2 各機能について
3 まとめ
――――――――――――――――――――――――――――

1.AWSとは
AWSとは、【Amazon Web Services】の略称で、Amazonが提供しているクラウドサービスのことです。
公式サイト→https://aws.amazon.com/jp/what-is-aws/

2.各機能について
①DirectConnect
・AWS Direct Connect は、標準のイーサネット光ファイバケーブルを介して内部ネットワークを AWS Direct Connect ロケーションにリンクします。ケーブルの一方の端はルーターに接続され、もう一方の端は AWS Direct Connect ルーターに接続されています。この接続を使用すると、パブリック AWS サービス (Amazon S3 など) または Amazon VPC への仮想インターフェイスを直接作成し、ネットワークパス内のインターネットサービスプロバイダーをバイパスできます。 AWS Direct Connect ロケーションは、関連付けられているリージョン AWS の へのアクセスを提供します。パブリックリージョンで単一の接続を使用するか、他のすべてのパブリックリージョンでパブリック AWS サービス AWS GovCloud (US) にアクセスできます。

②TransitGateway
・Transit Gateway は、仮想プライベートクラウド (VPC) とオンプレミスネットワークを相互接続するために使用できるネットワークの中継ハブです。クラウドインフラストラクチャがグローバルに拡張されるにつれて、リージョン間ピアリングはAWSグローバルインフラストラクチャ AWS データセンター間のすべてのネットワークトラフィックは、物理層で自動的に暗号化されます。

③EC2
・Amazon Elastic Compute Cloud (Amazon EC2) は、Amazon Web Services (AWS) クラウドでオンデマンドでスケーラブルなコンピューティング能力を提供します。Amazon EC2 を使用するとハードウェア コストが削減されるため、アプリケーションをより迅速に開発および展開できます。Amazon EC2 を使用すると、必要な数の仮想サーバーを起動したり、セキュリティとネットワークを構成したり、ストレージを管理したりできます。月次または年次プロセスや Web サイト トラフィックの急増など、コンピューティング負荷の高いタスクを処理するために、容量を追加 (スケールアップ) できます。使用量が減ったら、容量を再度削減 (スケールダウン) できます。

④RDS
・Amazon Relational Database Service (Amazon RDS) は、AWS クラウドでのリレーショナル データベースのセットアップ、運用、拡張を容易にする Web サービスです。業界標準のリレーショナル データベースにコスト効率に優れたサイズ変更可能な容量を提供し、一般的なデータベース管理タスクを管理します。

⑤EFS

・Amazon Elastic File System (EFS) は、サーバーレスで完全に伸縮自在なファイルストレージを提供するように設計されており、ストレージ容量とパフォーマンスをプロビジョニングまたは管理しなくても、ファイルデータの共有ができる仕組みになっています。AWS のサービスおよびオンプレミスリソースで使用でき、アプリケーションを中断することなくオンデマンドでペタバイトまで拡張できるように構築されています。

⑥CloudWatch

・Amazon CloudWatch は、Amazon Web Services (AWS) リソースと、AWS で実行されているアプリケーションをリアルタイムでモニターリングします。CloudWatch を使用してメトリクスを収集し、追跡できます。メトリクスとは、リソースやアプリケーションに関して測定できる変数です。
CloudWatch のホームページには、使用している AWS の各サービスに関するメトリクスが自動的に表示されます。さらに、カスタムダッシュボードを作成してカスタムアプリケーションのメトリクスを表示したり、選択したメトリクスのカスタムコレクションを表示したりできます。
メトリクスを監視し、しきい値を超過したときに通知を送信したり、モニターリングしているリソースを自動的に変更したりするアラームを作成できます。例えば、Amazon EC2 インスタンスの CPU 使用率およびディスク読み取り/書き込みをモニターリングし、そのデータを基に、増加する負荷を処理する追加のインスタンスを起動すべきかどうかを判断します。また、このデータを使用して、十分利用されていないインスタンスを停止することで、費用を節約することができます。
CloudWatch により、システム全体のリソース使用率、アプリケーションパフォーマンス、およびオペレーションの状態において可視性を得ることができます。

⑦Route 53
・Amazon Route 53 は、可用性と拡張性に優れたドメインネームシステム (DNS) ウェブサービスです。Route 53 を使用すると、ドメイン登録、DNS ルーティング、ヘルスチェックの 3 つの主要な機能を任意の組み合わせで実行できます。

⑧WAF
・WAF(Web アプリケーションファイアウォール)とは、Web アプリケーションの通信をフィルター、監視、ブロックするためのソフトウェアまたは、ハードウェアのセキュリティ対策です。一般のファイアウォールや IDS/IPS との違いは、アプリケーションレベルで通信の中身を解析し、特定の条件にマッチする通信を検知・遮断する点です。WAF の代表的な用途には、SQL インジェクション、クロスサイトスクリプティングなど、アプリケーションの脆弱性を悪用した攻撃の遮断やアプリケーション層の DDoS 対策、不正なボットによるアクセスの遮断などがあります。

⑨S3
・Amazon Simple Storage Service (Amazon S3) は、業界をリードするスケーラビリティ、データ可用性、セキュリティ、パフォーマンスを提供するオブジェクト ストレージ サービスです。あらゆる規模と業種のお客様が Amazon S3 を使用して、データ レイク、Web サイト、モバイル アプリケーション、バックアップと復元、アーカイブ、エンタープライズ アプリケーション、IoT デバイス、ビッグ データ分析など、さまざまなユースケースで任意の量のデータを保存および保護できます。Amazon S3 には管理機能が用意されており、特定のビジネス、組織、コンプライアンスの要件を満たすようにデータへのアクセスを最適化、整理、構成できます。

3.まとめ
AWSには、今回の記事でまとめたサービス以外にもまだまだあります。
気になる方はご自身でも調べてみてはどうでしょうか。

Javaのセキュアなコーディング

はじめに

Javaは比較的セキュアなプログラミングである。Javaは文法上のルールが多く、従わなければコンパイルすら通さないため、そういった意味では開発経験が少ない人でも一定の品質を担保することができる。しかしこれはJavaのシステムが必ず安全であると保障したものではない。Javaには粒度の細かなセキュリティ機構が備わっており、取扱いに注意すべきリソースに対するアクセスを制御することができるが、システムの安全性が侵害されることは稀ではない。そこで今回は「Java コーディングスタンダード CERT/Oracle版」を基にいくつかの問題のあるJavaコードとその改善案を中心に紹介していく。また、今回紹介する問題点のはJavaだけに限らないため、自分が普段使用している言語と見比べるとよい。

1,文字列は検査する前に標準化する(IDS01-J)

第三者から値を受けとる場合、入力された値が妥当であるかの検査は必須である。例えばクロスサイトスクリプティング(XSS)はスクリプトを値として与え、攻撃を行う手法であるが、回避手段の方法として<や>の挿入を検査する方法がある。以下はその例である。

 

このような実装はあまりよろしくない。なぜなら入力値に”\uFE64″や”\uFE65″とあった場合、<>を検知できない可能性があるからだ。そのため、検査を行う前に入力値の標準化が必要になってくる。JavaではNormalizerクラスのstaticメソッドであるnormalizeメソッドで正規化を行っていく。以下は上記コードを改良し、文字を検査する前に標準化を行う例である。(今回は第三者からの入力を表現するためにコンソールオブジェクトを明示しているが実際に標準化を確認するにはソースコードで直接”\uFE64″や”\uFE65″を格納するのが望ましい)

 

入力値の検査を標準化前に行ってしまうと不正な値が実行されてしまう可能性があるため、上記のように標準化後に検査を行うことがセキュアなシステム開発に繋がる。

2,データメンバはprivate宣言し、それにアクセスするためのラッパーメソッドを提供する(OBJ01-J)

publicなど公開範囲が広いデータメンバ(以下メンバ変数)を定義してしまうとアクセスを制御することが困難となり、攻撃者に想定外の方法で操作される可能性がある。このようなことを考慮し、メンバ変数はprivateで宣言し、制御の手段としてgetterやsetterといったアクセサメソッドを定義するべきである。以下は問題のあるコードの例である。

 

このようなメンバ変数の定義はやめるべきである。以下のようにprivateで宣言しアクセサメソッドを用意するのが好ましい

 

このように実装すればアクセサメソッドを介さなければメンバ変数を変更できないのでセキュアなコーディングとなる。また、このような実装をカプセル化という。なお、今回は省略しているがsetterメソッドでは入力された値の無害化を行うべきである。

3,privateかつ可変なクラスメンバへの参照を返す前にそのディフェンシブコピーを作成する(OBJ05-J)

可変なメンバへの参照を返すと悪意ある攻撃者にシステムが侵害されてしまう恐れがある。そのため、可変オブジェクトを返す場合にはディープコピーを作成して返すべきである。これをディフェンシブコピーという。以下に問題のあるコードと改善案を記載する。

 

上記は不適切なコード例である。この場合、メンバの参照をそのまま返してしまうため攻撃者に変更される恐れがあるためディフェンシブコピーを作成して返すべきである。以下に改善案を記載する。

 

このように実装することで可変メンバの持つデータを保護することができる。

おわりに

今回はJavaのセキュアなコーディングについて紹介していきました。実際にシステムやアプリケーションを作成する際には、今回紹介した例以上にセキュリティを意識しなければなりません。利用者が安心して利用できるようにするためにはデータを適切に保護し、管理していかなければならないでしょう。

FFFTPは転送モードに気をつけよう

「FFFTP」とは、世界的に普及している有名なFTPソフトの一つで、
Windowsでファイルやデータを転送する際によく用いられています。

今回、業務上でFFFTPを用いた作業において、
ちょっとした問題が発生したので、備忘として記事を残しておきます。

1.発生事象

シェルスクリプト改修のため、FFFTP経由でLinuxサーバ上からシェルをローカル(Windows)に転送。
その後、改修後シェルをFFFTP経由でサーバに転送した後、シェルを実行した際にエラーが発生。

syntax error: unexpected end of file(expecting "fi")

2.原因

シェル改修時にファイルを転送する際、FFFTPの転送モードが“自動転送”モードになっていたため、自動的に改行コードが「CRLF」になっていた。
Linux環境は改行コードが「LF」でないと正常に実行できないため、エラーが発生していた。
(上記のエラーだと、改行後の「fi」(if文の最後)が処理できていない)

3.対応・対策

シェルの改行コードを「LF」に修正後、転送モードを“バイナリ”モードに変更後、再転送。
転送後、シェルを実行すると正常実行できた。
<対策>
①FFFTPのオプションからデフォルトの転送モードを設定できるので、転送モードをバイナリモードに設定しておく。
②ファイルの転送前に転送モードの確認をする。
(今回の事象は②の確認が漏れていたため発生した)

Laravelについて

Laravelとは、2011年後頃に開発されたPHPフレームワークです。

LaravelはMVC規約(Model(モデル)/View(ビュー)/Controller(コントローラー))に基づいたソフトウェア設計です。
MVCとはUI(ユーザーインタフェース)をと内部データを分けるデザインパターンの一つで、
自分以外のソフトウェア設計者が使いやすいようにパターン化してカタログのようにわかりやすくまとめたものになります。

コントローラーソースにメソッドを定義し、URLに紐づけを行い(ルーティング)、
そのURLにアクセスされた際に紐づいたコントローラーを実行することが可能になります。
定義の仕方として、Routeクラスを使用します。 例:Route::get(URL,実行したいメソッド())

以上のように、コントローラーファイルにURLを紐づけ、メソッドでhtmlなどで画面を呼び出し、出力することも可能です。

GitのpushコマンドでPermission denied (publickey).エラーが発生

発生した問題

いつも通りステージングとコミットが完了したのでPushコマンドを実行したらエラーで怒られました。
ついこの間まで何も問題なく実行できたので、何が原因でこのようなことになったのかは解明できませんでしたが、
解決できたため手順を議事録としてまとめます。

発生したエラー

  git@github.com: Permission denied (publickey).
  fatal: Could not read from remote repository.
  Please make sure you have the correct access rights and the repository exists.

解決策

結論からいうと、SSH接続の設定をすることで解決できました。

手順

  1. 「~/.ssh」ディレクトリ内で、以下コマンドを実行し、sshキー(公開鍵・秘密鍵)を生成する
  2. ssh-keygen -t rsa -C [GitHubメールアドレス] -f [作成する鍵の名前]

    上記のコマンドを実行すると、二つのファイルが生成されます。

    • 作成する鍵の名前・・・秘密鍵
    • 作成する鍵の名前.pub・・・公開鍵
  3. GitHubにログインして画面右上のプロフィールアイコンを押したのち、「Settings」ボタンを押してください。
  4. 開かれたページの左側にある「SSH and GPG keys」を押下して開いてください。
  5. 新規でSSH keysの設定を作成してください。
  6. 手順①で生成したファイルに拡張子「.pub」がついているファイルがあるので、中身をコピーして以下画像の赤枠内に貼り「Add SSH key」ボタンで登録することができます。
  7. 登録後に以下コマンドで接続テストを行ってください。
    ssh -T git@github.com

以下のようなメッセージが返ってきたら接続テストOKとなります。

Hi [username]! You've successfully authenticated, but GitHub does not provide shell access.

最後にpushを行って完了です。

git push origin branch

【Laravel 11について】

今回は、2024年3月12日にリリースされた、Laravelのバージョン11について軽くまとめていきたいとおもいます。
公式サイト:https://readouble.com/laravel/11.x/ja/

目次
――――――――――――――――――――――――――――
① 変更点は?
② まとめ
――――――――――――――――――――――――――――

①変更点は?
・まず、welcomeページが大きく変わりました!!
※黒と赤がベースとなり、カッコ良くなっています。

【旧】

【新】

・ディレクトリ構造の変化
Laravel 11では、開発効率を高めるためにディレクトリ構造が一新されました。この変更により、プロジェクトファイルの構成がシンプルになり、以前のLaravelバージョンに含まれていた定型的なコードが削減されました。

【旧】
app
┣ Console
┣ Exceptions
┣ Http
┣ Models
┗ Providers
bootstrap
┣app.php
┗cache
artisan

【新】
app
┣ Http
┣ Models
┗ Providers
bootstrap
┣app.php
┗cache
artisan

②まとめ
・このようにLaravel 11では開発者の生産性やアプリケーションのパフォーマンスを引き上げるいくつもの革新的な機能が導入されており、カスタムが自由にやりやすくなっております。まだリリースされたばっかりなのでこらから修正も沢山はいるかと思いますが、皆さんも使ってみてはいかがでしょうか?
以上、Laravel 11についてでした。

HTMLのタグ1つだけで100種類のツールチップを実装できるCSSジェネレーター

タグ1つだけでcssをコピペするだけで、100種類のツールチップを実装できるジェネレーターを紹介します。
⇒CSS Generators: Tooltips & Speech Bubbles

シンプルなものからポップなものまで、しっぽの形や位置が違う100種類が用意されています。


使い方はとても簡単。
HTMLはたった1つのタグを記述するだけです。

<div class="tooltip">Your text content</div>

 
cssはツールチップをクリックしてコピペするだけ。

中身はこんな感じ。

.tooltip {
    color: #fff;
    font-size: 18px;
    max-width: 28ch;
    text-align: center;
}
.tooltip {
    /* triangle dimension */
    --b: 2em; /* base */
    --h: 1em; /* height */
    --p: 50%; /* triangle position (0%:left 100%:right) */
    padding: 1em;
    clip-path: polygon(0 100%,0 0,100% 0,100% 100%,
      min(100%,var(--p) + var(--b)/2) 100%,
      var(--p) calc(100% + var(--h)),
      max(0%  ,var(--p) - var(--b)/2) 100%);
    border-image: fill 0//var(--h)
      conic-gradient(#CC333F 0 0); /* the color */
}

 
上にあるスライダーを移動すると、好きな位置にしっぽを配置できます。

とても簡単ですので、活用してみてはいかがでしょうか。

HTTPステータスについて

今回は、Webサイトを閲覧しているときに404のエラーに遭遇した時、他の番号はどんなのがあるんのかな?と疑問に思ったため、【HTTPステータス】についてまとめていこうと思います。

 

目次

――――――――――――――――――――――――――――

  1. HTTPステータスとは
  2. ステータスコード一覧
  3. まとめ

――――――――――――――――――――――――――――

 

 ①HTTPステータス とは

HTTPレスポンスに含まれるWebサーバーの処理結果を表現する3桁の数字のことを指します。3桁の数字は「処理が成功した」、「リダイレクト(転送)がかかっている」、「エラーがある」、などさまざまな意味を持っています。

・100番台(Informational):処理中

HTTPステータスコード 意味
100 Continue リクエスト継続可能
101 Switching Protocols プロトコル切り替え
102 Processing 処理中
103 Early Hints 早期に予想されるヘッダを伝達

②ステータスコード一覧

・200番台(Success):成功

HTTPステータスコード 意味
200 OK リクエスト成功
201 Created リクエストが成功し、リソースの作成が完了
202 Accepted リクエストは受理されたが、まだ実行されていない
203 Non-Authoritative Information オリジナル以外の情報を含み信頼できない
204 No Content リクエストに対して送信するコンテンツがない
205 Reset Content リクエストのリセットを伝達
206 Partial Content 一部のリクエストが成功

 

・300番台(Redirection):リダイレクト

HTTPステータスコード 意味
300 Multiple Choice リクエストに対し複数のレスポンスがある
301 Moved Permanently URLが永遠に変更されたことを示す
302 Found URLが一時的に変更されたことを示す
303 See Other リクエストに対するレスポンスが別URLにある
304 Not Modified リクエストしたリソースは更新されていない
307 Temporary Redirect 一時的なリダイレクト(302とほぼ同じ)
308 Permanent Redirect 恒久的なリダイレクト(301とほぼ同じ)

 

・400番台(Client errors):クライアントエラー

HTTPステータスコード 意味
400 Bad Request リクエストが無効
401 Unauthorized 認証が必要
403 Forbidden クライアントにアクセス権がない
404 Not Found リソース・ページが存在しない
410 Gone リソース・ページが恒久的に削除された
411 Length Required リクエストにContent-Lengthヘッダーがない
429 Too Many Requests 一定時間内の大量リクエストによる拒否

 

・500番台(Server errors):サーバーエラー

HTTPステータスコード 意味
500 Internal Server Error サーバー内部エラー
502 Bad Gateway ゲートウェイとして動作するサーバーが無効なレスポンスを受け取った
503 Service Unavailable サーバーの過負荷やメンテナンスにより利用不可

③まとめ

HTTPステータスコードは大きく分けると100番台、200番台、300番台、400番台、500番台の5つに大別できる。

100番台:情報処理中であるということを示すHTTPステータスコード

200番台:通信が成功したことを示すHTTPステータスコード

300番台:リダイレクト(転送)がおこなわれたことを示すHTTPステータスコード

400番台:クライアント側でエラーが起きていることを示すHTTPステータスコード

500番台:サーバー側でエラーが起きていることを示すHTTPステータスコード

 

以上でHTTPステータスについて でした~。