GitHub – サインアップ

サインアップの流れ

サインアップの流れは以下のとおり。

  1. GitHubサイトでサインアップを選択
  2. アカウント作成ページで必要情報を登録
  3. 職業などのバックグラウンド情報を登録
  4. 起動コードをメールで受け取って最終登録

GitHubサイト

https://github.co.jp/にアクセス

  1. 右上の”サインアップ”リンクをクリック
  2. Create your accountページへ遷移

アカウント作成

Create your accountページ

  1. 登録情報の入力
    • Username
    • Email address
  2. ロボットでないことの認証
  3. “Create account”ボタンでWelcome to GitHubページへ遷移

バックグラウンド登録

Welcome to GitHubページ

  1. 職業関係、プログラミング経験などのバックグラウンドに関する質問に回答
  2. “Complete setup”ボタン
  3. 起動コードが登録したメールアドレスに届く

起動コード入力・サインアップ完了

  1. メール本文の”Open GitHub”ボタンでコード入力ページへ
  2. 起動コードを入力してサインイン
  3. ダッシュボードページへ遷移

2要素認証の推奨

GitHubサインイン時、ユーザー名とパスワードに加えて6桁のコードの入力が求められる。

登録したアドレスに送られるメールでコードを得られるが、平文で危険あり、毎回メールが送信されるのも面倒。

GitHubでは2要素認証(two-factor authentication: 2FA)を推奨しており、スマートフォンのアプリと紐づけることでアプリからコードを得られる。

SMSも選択できるが、日本のキャリアには対応していないらしい。

2要素認証の設定はこちらに整理。

 

GitHub – 2要素認証

2要素認証の推奨

GitHub登録後にサインインしようとすると、”Device verification”を求めらるページに遷移した。6桁の端末認証コードの入力が必要で、登録したEmailに認証コードを送ったとのこと(20210803時点)。

Hey taustation!

A sign in attempt requires further verification because we did not recognize your device. To complete the sign in, enter the verification code on the unrecognized device.

Device: Chrome on Windows
Verification code: ******

この6桁のコード(Verification code)をブラウザーで入力すると、すぐにサインインした。

このメールでは以下のメッセージが続いている。

If you did not attempt to sign in to your account, your password may be compromised. Visit https://github.com/settings/security to create a new, strong password for your GitHub account.

If you’d like to automatically verify devices in the future, consider enabling two-factor authentication on your account. Visit https://docs.github.com/articles/configuring-two-factor-authentication to learn about two-factor authentication.

If you decide to enable two-factor authentication, ensure you retain access to one or more account recovery methods. See https://docs.github.com/articles/configuring-two-factor-authentication-recovery-methods in the GitHub Help.

1段落目は、もしサインインしようとしていないのにこのメールが届いた場合、パスワードが盗まれている可能性があることを示唆している。リンクをクリックすると、サインイン中ならパスワード変更のページに遷移する。

2段落目は、デバイスの認証を自動化したい場合には2段階認証とするよう示唆している。

3段落目は、2段階認証にする場合のリカバリー手順を保存しておくことを示唆している。

2要素認証の流れ

  1. スマートフォンに認証アプリをインストールする

設定

スマートフォンへの認証アプリのインストール

スマートフォンのGoogle Playで”認証システム”で検索してヒットするGoogle認証システムをインストール。URLは以下のとおり。

https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=ja

インストール後のアプリケーション名が日本語の「認証システム」なのでちょっと見つけにくかった。

GitHubの設定

  1. ヘッダーメニューのドロップダウンで”Settings”を選択
  2. 設定ページの左メニューで”Account security”をクリック
  3. 下方Two-factor authenticationセクションにある”Enable two-factor authentication”ボタンをクリック
  4. 遷移後のページで”Setup using an app”と”Set up using SMS”のラジオボタン表示
  5. appの方を選択し(デフォルト)、”Continue”ボタンをクリック
  6. Authentication verificationのステップになり、QRコード表示

認証アプリへのGitHubの登録

  1. 認証アプリを起動してQRコードをスキャン
  2. 6桁のコードが表示されるので、それをGitHubのブラウザーに入力
  3. リカバリーコードが表示されるのでダウンロードして保存
  4. “Done”ボタンを押して完了

設定後の認証

  1. GitHabにサインイン
  2. ユーザー名とパスワードを入力
  3. 6桁のコードを問われるので、アプリに表示されるコードを入力

 

Vagrant – phpMyAdminのインストール – CentOS7

phpMyAdminのインストール

PHPをRemiリポジトリーからインストールしているので、phpMyAdminもRemiリポジトリーからインストールする。

ポートの設定

Vagrrant環境の場合、VagrantfileでApacheで使うポートを設定しておく必要がある。

Apacheの起動確認

Apacheの起動状態を確認。

停止していればApacheを起動。

403エラー

ここまでの状態でlocalhost:8080/phpMyAdminにアクセスすると、403エラーになった。

phpMyAdmin.confの修正

/etc/httpd/conf.d/phpMyAdmin.confを以下のように修正する。

修正後はApacheを再起動。

起動成功

localhost:8080/phpMyAdminでログイン画面が表示される。

 

Vagrant – Apache – CentOS7

導入

ポートフォワーディング

Vagrantfileの以下の行のコメントを外すか、行がなければ記述。

Vagrantfile修正後はVagrantを再起動。

httpdの状態確認と起動

httpdの稼働状況を確認。

停止しているなら起動。

接続確認

ホストのブラウザーからlocalhost:8080にアクセス。

 

PHP – 名前空間~namespace

概要

PHPの名前空間(namespace)は、Javaのパッケージのようにコード群をカプセル化し、異なる名前空間の間での名前の衝突を避ける役割を持つ。

namespace 名前空間名;

  • namespaceが記述された以降のコードはその名前空間に属する
  • 同じ名前空間内では、クラス名などはそのまま記述
  • 異なる名前空間のクラスなどを用いるときは、絶対パスを使うかuse文で名前空間を指定する(このuse文はトレイトuseとは異なる)

クラスの例

以下の例は、異なる名前空間のクラスを利用する場合。

  • 名前空間Bでクラス名MyClassだけを記述すると、名前空間BMyClassが使われる
  • 絶対パス\A\MyClassと記述すると、名前空間AMyClassが使われる
  • use \A\MyClassを記述すると、MyClassと記述したときに名前空間AMyClassが使われる(as ...でエイリアスも指定できる)

関数の場合

以下の例は、異なる名前空間の関数を利用する場合。

  • 名前空間Bで関数名funcだけを記述すると、名前空間Bfuncが使われる
  • 絶対パス\A\funcと記述すると、名前空間Afuncが使われる
  • use function \A\funcを記述すると、funcと記述したときに名前空間Afuncが使われる(as ...でエイリアスも指定できる)

定数の場合

以下の例は、異なる名前空間の定数を利用する場合。

  • 名前空間Bで関数名CONSTANTだけを記述すると、名前空間BCONSTANTが使われる
  • 絶対パス\A\CONSTANTと記述すると、名前空間ACONSTANTが使われる
  • use const \A\CONSTANTを記述すると、CONSTANTと記述したときに名前空間ACONSTANTが使われる(as ...でエイリアスも指定できる)

変数は名前空間によらずグローバル

変数は、それが定義された名前空間によらずグローバルスコープになる。

外部ファイルに分ける場合

外部ファイルで名前空間を設定している場合、インクルードしたコードで明示的に名前空間を指定する。

以下の例では2つのPHPファイルを準備し、それぞれの名前空間を設定している。

namespace_a.php

namespace_b.php

そして別のファイルでこれらのファイルを読み込んで実行する。

インクルード後に名前空間なしでクラス名のみ指定すると、クラスが見つからずエラーになる。

絶対パスかuseを使えば名前空間に応じたクラスを指定できる。

名前空間の部分指定

名前空間をパスで設定した場合、useでその一部を指定することができる。

以下の例では、

  • 名前空間japan\aichiの中でMyClassAMyClassBを定義
  • 名前空間japan\osakaの中でMyClassを定義
  • use japan\aichiとすることで、japan\aichiaichiとして使えるようになる
    • japan\aichi\MyClassAaichi\MyClassA
    • japan\aichi\MyClassBaichi\MyClassB
  • use japan\osakaとすることで、japan\osakaosakaとして使えるようになる
    • japan\osaka\MyClassosaka\MyClass

 

PHP – クラス定数

クラスの中で、constキーワードで定数を定義できる。

  • クラス内でアクセスする場合はself::でアクセス
  • クラス外でアクセスする場合はクラス名::でアクセス(変数::でも可能)

self::クラス名::などをつけないと、警告が出たうえで定数名自体が文字列として解釈される。

定数なので値を再代入することはできない。

const定義の右辺に定義済みの定数、算術式を使うことができる。しかし関数は使用できない。

定数定義の際にアクセス修飾子を使えて、アクセス制限ができる。省略した場合はpublic

 

PHP – gettype()/is_* – 型の確認

概要

値が特定のプリミティブ型かどうか、何かのクラスのインスタンスかどうかを確認する方法。

  • gettype()は型の名前の文字列を返す
  • is_*はそれぞれの型に合致しているかどうかをチェック

クラス関係の確認についてはこちらを参照、

gettype()

gettype()は、引数で与えられた値の型を文字列として返す。以下の例のほか、resourceunknown typeが準備されている。

is_*() – 型の確認

is_*(値)で値の型が合致しているかをチェック。

  • is_bool
  • is_numeric, is_finite, is_infinite, is_nan
  • is_int/is_integer, is_long, is_float/is_double/is_real
  • is_string
  • is_array
  • is_object, is_subclass_of

 

PHP – クラスの確認

概要

  • instanceof:値のクラスをチェック
  • is_a():値のクラスをチェック
  • is_subclass_of():値の親クラスをチェック
  • class_uses():トレイトを使っているかどうかチェック

instanceof/is_a()

instanceof

インスタンス instanceof クラス等名

instanceofは、第1オペランドが第2オペランドのクラスに合致しているかどうかをチェックする演算子。第2オペランドにはクラス名などをそのまま記述する。is_a()関数と同じ機能。

以下の例の様に、instanceofは、

  • そのインスタンスのクラス、継承した親クラス、インプリメントしたインターフェイスに対して真となる
  • トレイトについてはuseしていても真とはならない

is_a()

is_a(インスタンス, 'クラス等名');

is_a()は第1引数のインスタンスが第2引数のクラスに合致しているかどうかチェックする。第2引数のクラス名は文字列として与える。

以下の例のように、親クラス、インターフェイス、トレイトに対する判定はinstanceofと同じ。

is_subclass_of()

is_subclass_of(インスタンス, 'クラス等名');

is_subclass_of()は、第1引数のインスタンスのクラスが第2引数のクラスを継承しているかどうかをチェックする。引数の渡し方はis_a()と同じ。

以下の例のように、

  • 引数のインスタンスのクラスそのものは偽
  • 継承した親クラスとインターフェースに対しては真
  • トレイトは偽

class_uses()

class_uses(インスタンス);

class_uses()は、引数インスタンスのクラスがuseしているトレイト連想配列として返す。連想配列のキー・値とも、トレイト名の文字列。

トレイトをuseしているかどうかをチェックするには、class_uses()の結果の連想配列に対して、in_array()array_key_exists()でトレイト名が含まれるかどうかをチェック。

親クラスでトレイトをuseしていても、子クラスのclass_uses()では捕捉されない。

method_exists()/property_exists()

method_exists(インスタンス, ’クラス等名’)
property_exists(インスタンス, ’クラス等名’)

method_exists()は、第1引数で指定したインスタンスのクラスに第2引数で指定したメソッドが定義されているかどうかをチェックする。同様に、property_exists()はプロパティーが定義されているかどうかをチェックする。

以下の例で、method_exists()について確認する。

  • 指定したメソッドが定義されていればtrue、定義されていなければfalse
  • 親クラスのメソッドでも存在する(true)と判定(publicprivateに関わらない)
  • トレイトのメソッドも存在すると判定
  • 親クラスでuseされたトレイトのメソッドは、子クラスでも存在すると判定

 

PHP – array_key_exists() – 配列のキーの存在確認

概要

array_key_exists()$keyが配列のキーとして存在するかどうかをチェックする。比較にあたって、常に型変換が自動で行われる(‘==’と等価)。型までのチェックはされない。

array_key_exists($key, 配列)

連想配列への適用例

以下は連想配列に対する実行例。文字列と数値が自動で変換されている。

配列への適用例

配列に対しても適用可能で、この場合はインデックスが存在するかどうかがチェックされる。このときも自動的に型が変換される。

 

PHP – in_array() – 配列の値の存在確認

概要

in_array()は、指定した$needleが配列($heystack)の要素として含まれるかどうかをチェックする。

in_array($needle, 配列, $strict=false)

  • デフォルトでは$strict=falseで、型変換を行って内容比較する
  • $strict=trueを指定すると、型の一致まで確認する

配列の要素の確認

以下の例ではデフォルトの$strict=falseとなっていて、文字列・数値の変換が自動的に行われている('=='と同じ効果)。

$strict=trueを指定すると、文字列と数値の違いも判定される('==='と同じ効果)。

連想配列の値の確認

in_array()で連想配列を指定すると、キー・値のうち指定した$needleが「値として含まれるか」チェックする。キーとして含まれていてもfalseになる。

デフォルトの$strict=falseでは型変換が自動的に行われる。

$strict=trueに指定すると、型の一致までチェックする。

注意点

  • in_array()は空の配列やnullに対してfalseを返す
  • nullに対しては警告が出される