WordPressのデバッグログ設定と確認方法

wp-config.phpの設定

WordPressのデバッグ機能を有効にするために、wp-config.phpに以下の設定を追加します:

デバッグモードを有効化
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

エラーの種類

1)自動的に出力されるログ

  • データベース接続エラー
  • PHP自体のエラー(Fatal Error, Warning, Notice)
  • WordPressコア、テーマ、プラグインからのエラー
  • データベースクエリエラー

2)error_log()による明示的なログ

error_log('カスタムメッセージ: ' . $変数);
  • 開発者が意図的に出力する情報
  • デバッグ目的のカスタムメッセージ
  • 特定の処理の実行確認

debug.logの権限確認と設定

SSHでサーバーに接続

WordPressのwp-content/フォルダで権限確認

# 現在の位置を確認し、wp-contentディレクトリに移動します
cd public_html/wp-content/

# wp-contentディレクトリ内のファイル一覧と権限を確認
ls -la wp-content

# 下記の出力

[xx@svxxx public_html]$ cd wp-content/
[xx@svxxx wp-content]$ ls -la
合計 244
drwxr-xr-x  8 [所有者] members    179  1月  5 20:55 .
drwx--x--x 18 [所有者] members   4096  1月  5 18:24 ..
-rw-r--r--  1 [所有者] members 226399  1月  5 21:15 debug.log
-rw-r--r--  1 [所有者] members     28  1月 26  2022 index.php
drwxr-xr-x  4 [所有者] members   4096  1月  5 17:42 languages
drwxr-xr-x 14 [所有者] members   4096  1月  5 20:48 plugins
drwxr-xr-x  5 [所有者] members    110  1月  5 20:55 themes
....

-rw-r--r-- → 644(読み取り専用)

この管理者権限の設定で

  • 所有者(6): WordPress(PHP)が書き込み可能
  • 閲覧者(4): 管理者やツールが読み取り可能
debug.log 644 所有者(6) 閲覧者(4) 書き込み 読み取り

もし権限がちがっていたら変更

# debug.logファイルの権限を変更(書き込み可能に)
chmod 666 wp-content/debug.log

ログの確認

tail -f debug.log    # リアルタイムで監視
# または
tail -n 50 debug.log # 最後の50行を表示

権限の見方:

4. ログファイルの確認方法

# ログファイルの内容を表示
cat wp-content/debug.log

# ログをリアルタイムで監視
tail -f wp-content/debug.log

debug.logを削除し管理

debug.logを削除しても、次にデバッグログを出力する必要が生じた時点で、WordPressは自動的に新しいdebug.logファイルを作成します。

いくつかのおすすめの管理方法をご紹介します:

  1. 定期的なクリーンアップ
  • サイトの状況に応じて、月1回や四半期に1回など、定期的なタイミングで削除
  • 特に問題調査後は、不要なログが残り続けることを防ぐため削除を検討
  1. サイズベースの管理
  • ファイルサイズが一定量(例:10MBなど)を超えたら削除
  • サーバー容量の節約にもなります
  1. ログローテーション より高度な方法として、ログローテーションの仕組みを導入することもできます。これにより:
  • 古いログを自動的にアーカイブ
  • 一定期間経過したログを自動削除
  • ファイルサイズの制限

デバッグ情報の出力方法

PHPファイルでログを出力する例:

// 基本的なログ出力
error_log('Debug message here');

// 配列やオブジェクトの内容を出力
error_log(print_r($variable, true));

リポジトリとパッケージ管理

パッケージ管理とは

パッケージとはソフトウェアの実行プログラム、設定ファイルなどをまとめたです。

ソフトウェアのインストールはパッケージごとに行い、パッケージの管理方法はディストリビューションで変わってきます。

パッケージ管理システム

パッケージのインストール、アンインストール、アップデートの仕組みを提供します。

代表的なパッケージ管理システム

  • Debian形式(Debian GNU/LinuxやUbuntuなど)
  • RPM形式(Red Hat Enterprise LinuxやCentOSなど)
パッケージ管理システムディストリビューション扱えるパッケージ
「yum」ヤムRed Hat系(Cent OSなど)RPM系パッケージ
「apt」Debian系(Ubuntsだど)deb系パッケージ

Debianパッケージ管理

Debian系のディストリビューションはDebian形式のパッケージ管理方式を使います。

dkpgコマンド

dpkg→Debian Packageの略

dkpg オプション アクション

オプション
-Eすでに同バージョンがインストールされている場合インストールを行わない
-Gすでに新バージョンがインストールされている場合インストールを行わない
-Rディレクトリ内を再帰的に処理
アクション
-i –install パッケージファイル名インストール
-r –remove パッケージ名設定ファイルを残してパッケージをアンインストール
-p –purge パッケージ名設定ファイルも含めてパッケージをアンインストール
-l –list 検索パターンインストール済みのパッケージを検索して表示
-L –listfiles パッケージ名指定したパッケージからインストールされたファイルの一覧を表示
-s –status パッケージ名インストール済みのパッケージの詳細情報を表示
-S –Search 検索パターン指定したファイルがどのパッケージからインストールされたかを表示
-C –auditインストールが完了していないパッケージを表示

dpkg-reconfigure

dpkg-reconfigureコマンドを使うと、対話的な設定を実施することができます。

インストール済みのパッケージを再設定する

aptコマンドによるパッケージ管理

APTコマンドは、dpkgツールを拡張した、Debian系パッケージを管理することができます。

apt-getコマンド

APT(Advanced Packaging Tool)というパッケージ管理ツールのコマンドです。

依存関係を考慮しながらパッケージのインストール、アップグレード、アンインストールを行います。

apt-get [オプション] サブコマンド パッケージ名

install パッケージ名インストールまたはアップグレード
remove パッケージ名アンインストール
upgrade既存のパッケージの削除や新規のパッケージを追加せずに更新可能なものをアップグレード
dist-upgradeシステム全体をアップグレード
upgdateパッケージのデータベースを最新版に更新
clean過去のパッケージファイルを削除

apt-cacheコマンド

APTツールでDebian形式のパッケージ情報の検索・参照などを行います。

search キーワード指定したキーワードを含むパッケージを検索
show パッケージ名パッケージの一般的な情報を検索
showpkg パッケージ名パッケージの詳細な情報を検索
depends パッケージ名指定したパッケージの依存関係情報を表示
pkgnamesすべてのdebパッケージ一覧を表示

apt-fileコマンド

apt-fileコマンドは、指定したファイルが含まれているパッケージを検索します。

updateパッケージ情報を最新版に更新
search、find 検索パターンパスに検索パターンがあるファイルを含むパッケージを検索
list、show パッケージ名パッケージに含まれているファイル一覧を検索

yumコマンドによるパッケージ管理

yum

ソフトウェアパッケージの管理をするプログラムです。

依存関係を調整しながら、インストール・アンインストールなどを行います。

installパッケージのインストール
updateパッケージのアップデート
removeパッケージのアンインストール
infoパッケージの詳細情報を表示
listパッケージ一覧を表示
searchキーワードでパッケージを検索
grouplistパッケージグループの一覧を表示
groupinstallパッケージグループのインストール
deplist指定したパッケージが依存しているパッケージの一覧を表示

/etc/yum.repos.d

YUMの設定は、/etc/yum.confと/etc/yum.repos.dディレクトリでファイルで行います。/etc/yum.repos.dディレクトリにパッケージ取得元を設定するファイルが格納してあります。

RPMパッケージ管理

rpmコマンドにはいくつかのモードがあります。

  • インストールモード
  • アンインストールモード
  • アップグレードモード
  • 照会モード
オプション
-i –installパッケージのインストール
-U –upgradeパッケージのアップデート(なければインストール
-F –freshenパッケージのアップデート(なければインストールしない
-e –eraseパッケージのアンインストール
併用オプション -v詳細情報を表示
併用オプション -h –hash進行状況を表示
併用オプション –test実際には実行せずテストで実施
併用オプション –nodeps依存関係を無視
オプション
-q –query指定パッケージがパッケージがインストールされているか照会
-V –vertify
(併用オプションは-a、–nomd5のみ)
パッケージの検査
併用オプション -a –allインストール済みの全パッケージをの表示
併用オプション -l –list指定したパッケージに含まれるファイルを表示
併用オプション -i –info詳細情報を表示
併用オプション -f –file ファイル名指定したファイルがどのパッケージからインストールされたか表示
併用オプション -p –package照会対象をパッケージとする
併用オプション –changelog変更履歴を表示
併用オプション -c –configfiles設定ファイルの一覧を表示
併用オプション –nomd5MD5によるファイルの改ざんの検査をしない
GNUとUnixのコマンド

コマンドラインの操作

シェル

入力されたコマンドを受け付け、対応するプログラムを実行しているプログラムをシェルといいます。

シェル変数

変数を設定したシェル上でのみ有効な変数です。

exportコマンド

シェル変数を環境変数に変更します。

操作シェル変数環境変数
設定変数名=値export 変数名
export 変数名=値
declare -x 変数名=値
表示setenv
削除unset 変数名unset 変数名

環境変数

シェル上に加えてそのシェル上で起動した子プロセス(アプリケーション、コマンド)でも有効です。

シェルの種類やコマンド検索のパス等、動作に影響する設定値です。

HISTFILEコマンド履歴保存ファイルのパス
HISTSIZE現在のシェルでのコマンドの保存数
HOMEログインしているユーザのホームディレクトリ
PATHコマンドやプログラムを検索するディレクトリのリスト
PWDカレントディレクトリのパス

引用符

「’」シングルクォーテーション

文字列と解釈

「”」ダブルルクォーテーション

文字列と解釈し、変数を展開します。

またバッククォーテーションが使われている場合、その中も展開されます。

「\」バックスラッシュ

バックスラッシュ直後の文字は文字列と解釈され、展開されません。

バックスラッシュは文字とよばれます。

「`」バッククォーテーション

コマンドは実行結果が展開されます。

メタキャラクタ

シェルによって特別に解釈される文字をメタキャラクタといいます。

メタキャラクタ
*0文字以上の文字列
?任意の1文字
[][~] 内の任意の1文字
[!~] 以外の任意の1文字

フィルタを使ったテキストストリームの処理

cat

ファイルの内容を標準出力に出力します。concatenate ( つなぐ、連結する )

-n –number各行の左に番号を付与

od

バイナリーファイルを8進数や16進数で表示します。(デフォルトは8進数)

-t -format 出力ファイル出力するフォーマットを指定
出力タイプ
cASCⅡ文字
o8進数(デフォルト)
t16進数

paste

1つ以上のファイルを読み込み、行ごとに水平方向に連結します。

区切り文字はデフォルトでタブ

-d 区切り文字区切り文字を指定(デフォルトはタブ)

paste [ オプション ] ファイル名1 ファイル名2 …

join

2つのファイルを読み込んで、共通のフィールドを持つ行どうし連結します。

join [ オプション ] ファイル名1 ファイル名2

-j フィールド連結するフィールドを指定

fmt

テキストを1行あたり決められた桁数に整形します。

-w 1行の文字数を指定

ストリーム、パイプ、リダイレクトの使用

リダイレクト

通常コマンドの実行結果は画面上に表示されますが、リダイレクトは実行結果をファイルに保存したり、用意しておいたファイルに使用する場合に使います。

コマンド>ファイルコマンドの標準出力をファイルに書き込む
コマンド<ファイルファイルの内容をコマンドの標準入力に送る
コマンド>>ファイルコマンドの標準出力をファイルに追記
コマンド<<終了文字終了文字が現れるまで標準入力へ送る
コマンド1|teeファイル|コマンド2コマンド1の出力結果をコマンド2の標準入力に渡し、併せてファイルに書き込む

tee

teeコマンドは標準入力の内容を、Tの字のように、標準出力先とファイルの両方に出力するコマンドです。

通常、|(パイプ)と使用します。コマンドの標準出力をteeコマンドの標準入力に渡します。

コマンド | tee ファイル

xargs

あるコマンドの出力を、別のコマンドの引数として実行します。

正規表現を使用したテキストファイルの検索

正規表現

.任意の1文字
*直前の文字列の0回以上の繰り返し
[][]内の1文字、-は範囲指定、^は後続の文字列以外
^行頭
$行末
\次の文字をエスケープ(通常の文字として処理)
+直前の文字を1回以上繰り返し
?直前の文字を0、1回の繰り返し(拡張正規表現)
|左右どちらかの文字列(拡張正規表現)

grep

検索文字列があるかどうか調べます。

-c –countマッチした行数を表示
-f –file検索パターンをファイルから読み込む
-i –ignore-case大文字小文字区別しない
-n –line-number併せて行番号も取得
-v –invert-matchマッチしない行を表示
-E –extended-regexp拡張正規表現を使用(egrepと同様)
-F固定文字列とする(fgrepと同様)

sed

stream editor

オプション
-f ファイルコマンドに書かれたスクリプトファイルを指定
-i処理した内容でファイルを上書き
-e編集コマンドを指定(1つの場合省略可能)
sed オプション -e 編集コマンド1 -e 編集コマンド2 ファイル名
sコマンド(置換)
s/文字列1/文字列2/各行の最初に現れる文字列1を文字列2に置換
s/文字列1/文字列2/gすべての文字列1置換
s/文字列1/&を含む文字列2/&に文字列1を再利用
dコマンド(置換)
/文字列/d文字列が含まれる行を削除
行番号1,行番号2d行番号1から行番号2までの行を削除

エディタを使った基本的なファイル編集の実行

viエディタ

テキストファイルを編集するときに使います。

viの起動直後はコマンドモードになっています。

vi [-R] [ファイル名]
-Rオプションは読み取りモード、ファイル名を指定しなければ空の新規ファイルを作成します。

入力モード

iカーソルのある位置の左から入力 insert
aカーソルのある位置の右から入力 append
Iカーソルのある行の先頭から入力
Aカーソルのある行の末尾から入力
0カーソルのある行の上に空白行を挿入し、その行で文字を入力します。
oカーソルのある行の下に空白行を挿入し、その行で文字を入力 open line

カーソル操作

h
l
k
j
O行の先頭へ移動
$行の末尾へ移動
H画面の一番上の行頭へ移動
L画面の一番下の行頭へ移動
ggファイルの先頭行へ移動
Gファイルの最終行へ移動
nG
:n
ファイルのn行目に移動

編集コマンド

yy Y (yank)行をバッファにコピーします。コマンドの直前に数字を付けると、その回数分viコマンドが繰り返されます。
yw(word)カーソル位置の単語をコピーします。
ddカーソル位置の行を削除し、バッファにコピー
dw(dlelete word)カーソル位置から次の単語までを削除し、バッファにコピー
xカーソル位置の文字を削除し、バッファにコピー
Xカーソル位置の左の文字を削除し、バッファにコピー
p(paste)バッファの内容を挿入します。文字はカーソルの右、行はカーソルの下に挿入されます。
Pバッファの内容を挿入します。文字はカーソルの左、行はカーソルの上に挿入されます。
u直前の操作をキャンセル

:r 指定したファイルの内容をカレント行の後に読み込んで挿入する

viエディタの終了、保存

:q(quit)viを終了します、内容が変更されている場合警告が表示されます。
:q!強制終了します。
:w編集内容を保存
:wq 😡 ZZ編集内容を保存し、終了
:wq!編集内容を保存し、強制終了
:e ファイル名viを終了せず、現在のファイルを閉じて別ファイルを開く
内容が変更されている場合はファイルを開くことができない
:e! ファイル名viを終了せず、現在のファイルを閉じて別ファイルを開く

ファイル名を省略した場合、最後に保存した状態に戻す

cat

od

sed

head

tail

cut

paste

ハードウェア、ディスク、パーティション、ファイルシステム

ハードウェアの基礎知識と設定

基本的なシステム、ハードウェア

CPU

コンピュータの中心的な処理装置、Linuxは多くのCPUに対応している。

メモリ

コンピュータ内でデータを記憶する装置(メインメモリ、主記憶)です。電源が切れるとメモリの内容は消失します。

Linuxを動作させるには512Mバイト~1Gバイト程度以上のメモリが推奨。

ストレージ

大きなサイズのデータや、長期の保存はストレージを使います。

  • ハードディスク(HDD:Hard Disk Drive)‥磁気ディスクに記憶する
  • SSD(Solid State Drive)‥フラッシュメモリに記憶する

SATA(Serial ATA)現在主流の企画

SAS(Serial Attached SCSI)SATAより高速、高信頼で高価。

BIOS

マザーボードに搭載されているプログラムです。

(Basic Input Output System:入出力基本システム)

UEFI

現在ではBIOSの後継となるファームウェア規格のUEFI(Unified Extensible Firmware Interface)が普及している。

カーネルモジュール

カーネルモジュールとは、カーネルで扱う色々な機能を独立したパーツのようなものです。

insmod

insmodカーネルモジュールをロードするコマンドです。

modprobe

依存関係を考え、カーネルモジュールをロード、アンロードするコマンドです。

rmmod

rmmodコマンドは依存するモジュールは削除せず、指定したモジュールだけを削除します。

依存関係を考慮してカーネルモジュールをアンロードする場合は、modprobe -r (–remove)を使用します。

USBデバイス

  • HID(human interface device)‥キーボード、マウス
  • Mass Storage Class‥ハードディスク、USBメモリ
  • ACM Communication Device Class‥モデム、TA
  • Audio Class‥スピーカー、マイク

udev

udev(Userspace DEVice management)によって/devディレクトリ以下のデバイスファイルは自動的に作成されます。

/procディレクトリ

/procディレクトリ以下のファイルは、実体のない仮想ファイルです。テキストファイルです。

/proc/cpuinfo

CPUの情報は/proc/cpuinfoで確認できます。

/proc/scsi/scsi

SCSIデバイスの情報は/proc/scsi/scsiファイルで確認できます。

/proc/meminfo

メモリの使用状況は/proc/meminfoファイルでみることができます。

/proc/dma

デバイスが使用中のDMAチャネルの情報は/proc/dmaファイルでみることできます。

lsusb

lsusbは接続されたUSBデバイスの情報を表示するコマンドです。

lspciコマンド

lspci [オプション]

-v 詳細表示(-vvでさらに詳細)

  1. PCI識別番号
  2. PCIデバイスの種類
  3. ベンダー名、ベンダーID
  4. デバイス名
  5. バスの速度(詳細表示のみ) 
  6. IRQ番号(詳細表示のみ) 
  7. I/Oポートアドレス(詳細表示のみ)

PCI

PCI‥Peripheral Components Interconnect

PCIデバイスにはネットワークカード(NIC:Network Interface Card)などがあります。

D-Bus

Desktop Bus

Linuxで使われるプロセス間通信機構でアプリケーション間のやり取りを行います。

ファイルシステムの作成と管理

ハードディスクのレイアウトとパーティション

lvm

Logical Volume Manager … 論理ボリューム管理

仮想的なパーティションを動的に管理する機能です。

  • 論理ボリュームは複数のディスクにまたがって作成可
  • スナップショット(ある時点の記録)を取得が可能
  • 後からボリュームグループのサイズを変更可能

パーティション管理コマンド

fdisk

パーティションの作成、削除、変更、情報表示

MBR方式に対応

-lオプション そのデバイスのパーティションテーブルの状態を表示します。

mサイドメニューの表示
lパーティションタイプの一覧表示
nパーティションの作成
dパーティションの削除
pパーティションテーブルの表示
tパーティションタイプ(システムID)の変更
w変更を保存して終了
q変更を保存せずに終了

gdisk

GPTに対応したパーティションのコマンドです。

parted

MBRにもGPTにも対応したコマンドです。

check簡単なチェックを行う
mklabel
MBR形式 msdos
GPT形式 gpt
パーティションテーブルの作成
mkpartパーティションの作成
rm 番号パーティションの削除
print pパーティションテーブルの表示
quit q終了する

ext2 Linux標準のファイルシステム

ext3 ext2にジャーナリングシステムを追加

ext4 ext3を機能拡張した

XFS Red Hat Enterprise Linux 7やCentOS 7で標準のファイルシステム

Btrfs

B-tree file system

Btrfsは、Linux向けの新しいファイルシステムです。

  • 複数の物理ボリュームにまたがりファイルシステムを作成できます(マルチデバイスファイルシステム)。
  • スナップショットを作成できます。
  • サブボリューム単位でのスナップショット機能があります。
  • ディレクトリの一部をサブボリュームとして個別のファイルシステムのように扱える

/tmp

「/tmp」ディレクトリは一時的なファイルを格納するディレクトリで、あらゆるユーザが書き込むことができます。また、格納されているファイルやディレクトリは再起動すると消去されます。

mountコマンド

マウントとはディスク装置をLinuxのディレクトリの配下に設定し使えるようにする作業をです。

-a 全てのファイルシステムをマウント

-t ファイルシステムのタイプを指定

unmountコマンド

My-Snow-Monkey使用例、子テーマによるカスタマイズ

Contents

CSSファイルの読み込み

My-Snow-Monkey プラグインをを有効化します

FTPソフト等で下記の構成に

wp-content/
├── plugins/
│   └── my-snow-monkey/          # My Snow Monkeyプラグインのフォルダ
│       ├── my-snow-monkey.php   # プラグインのメインファイル
│       └── assets/
│             └ style.css     # 読み込みたいcssファイル
│
└── themes/
    └── snow-monkey/            # Snow Monkeyテーマ本体

my-snow-monkey.phpで下記コード記載(追記)

// CSSファイルの読み込み
add_action(
	'wp_enqueue_scripts',
	function() {
		wp_enqueue_style(
            'my-snow-monkey',
		 MY_SNOW_MONKEY_URL . '/assets/style.css', // my-snow-monkeyフォルダのassets/style.cssの場合
            [ Framework\Helper::get_main_style_handle() ],
            filemtime( MY_SNOW_MONKEY_PATH . '/assets/style.css' )
		);
	}
);

assets/style.css

.l-header {
    background-color: #333;
    color: #fff;
}

下記のようにスタイルが反映されました

wp_enqueue_scripts

ユーザーが見るWebページにのみ出力されます。編集画面や管理画面には出力されません。

enqueue列に加えるというような意味

MY_SNOW_MONKEY_URL

 My Snow Monkeyで用意している定数。

My Snow Monkey の URL… My Snow MonkeyのURL

wp_enqueue_style()

  • WordPressではwp_enqueue_style()関数でファイルを読み込むことが推奨されています。
  • 基本的にフック(wp_enqueue_scripts等)を利用して読み込みます。
wp_enqueue_style( $handle, $src, $deps, $ver, $media )

$handle … スタイルのユニークな名前。
$src … スタイルシートまでのURL
$deps … 事前に読み込むべきスタイルの名前($handle)(配列形式)特に必要なければ、array()を記入(初期値はarray())
$ver … 最新のバージョンを読み込ませる(初期値はfalse)
$media … media属性 (初期値はall)

https://happy-snow-monkey.olein-design.com/how-to-add-and-style-css-files-from-my-snow-monkey

Snow MonkeyのブレイクポイントをCSSで書く場合


@media screen and (max-width: 1279px) {
// 1279px以下をここにかく
}
@media screen and (max-width: 1023px) { 
// 1023px以下をここにかく
}
@media screen and (max-width: 639px) {
// 639px以下をここにかく
}

jsファイルの読み込み

my-snow-monkey.phpで下記コード記載

add_action('wp_enqueue_scripts', 'msm_enqueue_style_script');
function msm_enqueue_style_script()
{
	/* js読み込み */
	wp_enqueue_script(
		'msm_scripts',
		MY_SNOW_MONKEY_URL . '/script.js', // my-snow-monkeyフォルダのscript.cssの場合
		['jquery'],
		filemtime(MY_SNOW_MONKEY_PATH . '/script.js'),
		true // バージョン
	);
}

wp_enqueue_script()

wp_enqueue_script( $handle, $src, $deps, $ver, $in_footer )

$handle … スタイルのユニークな名前。
$src … スタイルシートまでのURL
$deps … 事前に読み込むべきスタイルの名前($handle)(配列形式)
$ver … バージョン。falseにしておけばWordPressが自動的にバージョン情報を入れてくれます。初期値はfalse
    ※原因はわかりませんが、falseでなくてfilemtime( MY_SNOW_MONKEY_PATH . '/js/script.js' )を記載しないと動かない場合あり
$in_footer … trueの場合</body>終了タグの前に配置される。 

【注意点】$を参照する方法

WordPressのjQueryを使う際、エラーを防ぐため下記のように変更する必要があります。

// 方法1
(function($) {
 // $()を使用可能
})(jQuery);

// 方法2
jQuery(function( $ ) {
  〜
} );
https://snow-monkey.2inc.org/forums/topic/jquery%e3%82%92%e8%bf%bd%e8%a8%98%e3%81%97%e3%81%9f%e3%81%84%e3%81%a7%e3%81%99%e3%80%82

head 要素内に独自のタグを追加

FontAwesomeの読み込み

// ------------------------------------------------
// FontAwesomeの読み込み
// ------------------------------------------------

add_action('wp_head', function () {
 ?>

  <!-- FontAwesome -->
  <link href="https://use.fontawesome.com/releases/v5.6.1/css/all.css" rel="stylesheet">
 <?php
});

下記の公式サイトのギャラリーページで使いたいアイコンのhtmlをコピーして使います。

https://fontawesome.com/icons?d=gallery

Googleマテリアルアイコン

phone groups

my-snow-monkey.phpを編集します

// ------------------------------------------------
// Googleマテリアルアイコン
// ------------------------------------------------
add_action('wp_head', function () {
?>
//選択したアイコンのスタイルシート
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200" />
<?php
});

下記のGoogleマテリアルアイコンで使いたいアイコンのhtmlをコピーして使います。

https://fonts.google.com/icons

疑似要素で使用する場合

my-snow-monkey.php

// Googleマテリアルアイコン
add_action('wp_head', function () {
	?>
	<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" />
	<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
	<?php
});
.recruit-features li {
    min-width: 34%;
    padding-left: 60px;
    position: relative;
    font-size: 1.125rem;
    font-weight: bold;
}

.recruit-features li::before {
    position: absolute;
    left: 0;
    top: 50%;
    transform: translateY(-50%);
    font-family: 'Material Icons';
    content: '\e92f';
    font-size: 2rem;
    line-height: 30px;
    width: 30px;
    height: 30px;
    background: var(--green2);
    border-radius: 50px;
}

文字の高さが合わないとき

<a>会社概要
<span class="material-symbols-outlined">chevron_right</span></a>

このような場合は以下のようにcssを

display: inline-flex;
align-items: center;

テンプレートのコメントアウト表示

ワードプレスをインストールしたディレクトリ?にあるwp-config.phpに以下のコードを追記、もしくは書き換えすることで可能です。

define( 'WP_DEBUG', true );

※ false → trueに

何のテンプレートパーツを読み込んでいるのかをHTML内のコメントアウトで確認出来て便利です。

テンプレートファイルの上書き

viewディレクトリにSnow Monkeyはテンプレートファイルを格納しています。

テンプレートを上書きするソースコード

<?php
add_filter(
	'snow_monkey_template_part_root_hierarchy',
	function( $hierarchy ) {
		$hierarchy[] = untrailingslashit( __DIR__ ) . '/view';
		return $hierarchy;
	}
);

add_filter

add_filter( フック名, 関数名, 優先順位, 引数の数 );

【ページのコンテンツ部分にファイルを出力したい】※ヘッダー、フッターはそのまま使用

テンプレートをmy-snow-monkey上に作成したファイル(※1)で上書きをし、特定のページIDの場合(※2)コンテンツ(html)をはく

※1子テーマの作成が不要

手順(1)プラグインmy-snow-monkeyのfunctions.phpを編集

// My Snow Monkey の中でテンプレートを追加できるようにする

// 参考 https://snow-monkey.2inc.org/manual/manual-advanced/add-template-root/

add_filter(
	'snow_monkey_template_part_root_hierarchy',
	function( $hierarchy ) {
		$hierarchy[] = untrailingslashit( __DIR__ ) . '/override';
		return $hierarchy;
	}
);

手順(2)上書き対象のテンプレートファイルを調べる

上記コメントアウト表示方法を参考

例としてコンテンツを上書きしてみます。

上書き前 snow-monkey/template-parts/content/entry/content/content.php

上書き後 my-snow-monkey/override/template-parts/content/entry/content/content.php

手順(3)上書きするのテンプレートファイルを作成

上書き前のファイルを内容をコピペ

例としてsnow-monkey/template-parts/content/entry/content/content.php

▼snow-monkey/template-parts/content/entry/content/content.php

<?php
/**
 * @package snow-monkey
 * @author inc2734
 * @license GPL-2.0+
 * @version 10.8.0
 */

use Framework\Helper;
?>

<?php do_action( 'snow_monkey_before_entry_content' ); ?>

<div class="c-entry__content p-entry-content">
	<?php do_action( 'snow_monkey_prepend_entry_content' ); ?>

	<?php the_content(); ?>
	<?php Helper::get_template_part( 'template-parts/content/link-pages' ); ?>

	<?php do_action( 'snow_monkey_append_entry_content' ); ?>
</div>

<?php do_action( 'snow_monkey_after_entry_content' ); ?>

▼my-snow-monkey/override/template-parts/content/entry/content/content.php

<?php
/**
 * @package snow-monkey
 * @author inc2734
 * @license GPL-2.0+
 * @version 10.8.0
 */

use Framework\Helper;
?>

<?php do_action( 'snow_monkey_before_entry_content' ); ?>

<div class="c-entry__content p-entry-content">
	<?php do_action( 'snow_monkey_prepend_entry_content' ); ?>

    <?php
    if ( is_page('8') ) {
        ?>
            <p>my-snow-monkey/override/template-parts/content/entry/content/content.phpです。</p>
            <p>※ページID8の場合使用されます。</p>
        <?php
    }
    ?>

	<?php Helper::get_template_part( 'template-parts/content/link-pages' ); ?>

	<?php do_action( 'snow_monkey_append_entry_content' ); ?>
</div>

<?php do_action( 'snow_monkey_after_entry_content' ); ?>

手順(複数のページの場合)さらにファイルを分割したほうがわかりやすい
require ‘ファイル名’;で呼び出す

my-snow-monkey/override/template-parts/content/entry/content/content.phpと同じディレクトリにrequireで呼び出すファイル用のディレクトリを作成します。(例:my-snow-monkey/override/template-parts/content/entry/content/require/id68.php)

▼my-snow-monkey/override/template-parts/content/entry/content/content.php

<?php
/**
 * @package snow-monkey
 * @author inc2734
 * @license GPL-2.0+
 * @version 10.8.0
 */

use Framework\Helper;
?>

<?php do_action( 'snow_monkey_before_entry_content' ); ?>

<div class="c-entry__content p-entry-content">
	<?php do_action( 'snow_monkey_prepend_entry_content' ); ?>

    <?php
    if ( is_page('68') ) {
        require 'require/id68.php';
    }
    ?>

    <?php
    if ( is_page('8') ) {
        require 'require/id8.php';
    }
    ?>

	<?php Helper::get_template_part( 'template-parts/content/link-pages' ); ?>

	<?php do_action( 'snow_monkey_append_entry_content' ); ?>
</div>

<?php do_action( 'snow_monkey_after_entry_content' ); ?>

▼my-snow-monkey/override/template-parts/content/entry/content/require/id68.php

<p style="color: blueviolet">my-snow-monkey/override/template-parts/content/entry/content/require/id68.php</p>
<p>※ページID68の場合使用されます。</p>です。

https://snow-monkey.2inc.org/manual/manual-advanced/template-hooks

https://snow-monkey.2inc.org/manual/manual-advanced/add-template-root

https://happy-snow-monkey.olein-design.com/preparing-to-overwrite-the-snow-monkey-template-file-from-my-snow-monkey

【ショートコード】編集画面で任意の場所にHTMLファイルを挿入

https://bizlabo.site/?p=1228

子テーマによるカスタマイズ

  • 子テーマによるカスタマイズは親テーマをバージョンアップしても、変更されません。
  • サイトの読み込み速度が遅くなる可能性があります。

Snow Monkey の子テーマとして設定

style.cssを編集する

/**
 * Template: snow-monkey
 * Theme Name: Snow Monkey Child
 */

親テーマ snow-monkeyの場合
cssの読み込みの設定

functions.phpを編集する

CSSでスタイルを当てないカスタマイズの場合は不要?

<?php
add_action( 'wp_enqueue_scripts', function() {
	wp_enqueue_style(
		get_stylesheet(),          //子テーマの名前を取得
		get_stylesheet_uri(),
		[ get_template() ]         //現在有効中のテーマ
	);
} );
wp_enqueue_style( $handle, $src, $deps, $ver, $media )

$handle … スタイルのユニークな名前。
$src … スタイルシートまでのURL
$deps … 事前に読み込むべきスタイルの名前($handle)(配列形式)
$ver … バージョン
$media … media属性 
 body {
    background-color: #ccc;
  }

エラー対応

ブロック読み込みエラー 返答が正しい json レスポンスではありません。

編集画面で下記表示になり更新できない

「ブロック読み込みエラー 返答が正しい json レスポンスではありません。」

解決方法

解決方法を検索したところ、レンタルサーバのWAF設定、プラグイン由来等いろいろ原因は考えられるようですが、結論my-snow-monkeyプラグインのmy-snow-monkey.phpの記述でコメントアウトの仕方がおかしい箇所をなおしたら解決しました。

参考:

https://snow-monkey.2inc.org/forums/topic/%E8%BF%94%E7%AD%94%E3%81%8C%E6%AD%A3%E3%81%97%E3%81%84-json-%E3%83%AC%E3%82%B9%E3%83%9D%E3%83%B3%E3%82%B9%E3%81%A7%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82
Linuxのインストールと仮想マシン・コンテナの利用 – 基本概念から【実践的なdocker-composeコマンド】まで

仮想マシン・コンテナの概念と利用

コンテナ型仮想化とは

サーバ仮想化技術のひとつです。

コンテナの特徴(仮想マシンとの違い)

  • 高速な起動と停止が可能
  • OSカーネルを共有する軽量な仮想化
  • アプリケーションレベルの分離
仮想マシンとコンテナの比較 仮想マシン (VM) ホストOS 物理ハードウェア VM 1 アプリ1 ゲストOS 1 VM 2 アプリ2 ゲストOS 2 コンテナ Dockerエンジン ホストOS 物理ハードウェア Container 1 アプリ1 Container 2 アプリ2 • 完全なOSを含む • リソース消費が大きい • 起動に時間がかかる • OSカーネルを共有 • 軽量で高速 • リソース効率が良い

コンテナ技術を管理するソフトウェア

  • Docker(基本的なソフトウェア)…Docker社が開発したコンテナ仮想化を用いてアプリケーションの開発や実行する環境を構築できるプラットフォーム
  • Kubernetesクバネティス…Googleが開発したコンテナ運用管理を支援するオープンソースのソフトウェア

dockerコマンド

Docker基本コマンド一覧 コンテナのライフサイクル管理 docker run 新規コンテナの作成と起動 docker start/stop コンテナの起動/停止 docker kill コンテナの強制停止 docker rm コンテナの削除 docker ps コンテナ一覧表示 コンテナとの対話 docker attach 標準入出力に接続 docker exec コマンド実行 イメージ管理 docker pull イメージのダウンロード docker push イメージのアップロード docker images イメージ一覧表示

Dockerコマンド実行の前提条件

  1. Dockerデーモン(dockerd)が動作していること。
  2. コマンドを実行するユーザーがDockerグループに属していること(または管理者権限)。

docker-compose コマンドについても同様に、Dockerデーモンとユーザー権限が必要です。

docker run新しいコンテナを作成して起動する
イメージから新しいコンテナを作成し、指定されたコマンドを実行して起動する
docker start既存の停止したコンテナを再起動する
停止しているコンテナを起動するだけ(新しいコンテナは作らない)
docker stopコンテナを安全に停止
docker killコンテナを強制的に停止
docker ps実行中のコンテナの確認
# 停止中のコンテナを含めて確認
docker ps -a
docker rm <コンテナID>停止中のコンテナを削除
docker attachコンテナの標準入出力に接続
docker exec [オプション] <コンテナ名またはID> <コマンド>実行中のコンテナ内でコマンドを実行
docker pullDocker Hubからダウンロード
docker pushDocker Hubにアップロード
docker imagesイメージ一覧表示

Dockerfileとdocker-compose.ymlの違い

DockerfileとDocker Composeの役割 Dockerfile FROM node:14 WORKDIR /app COPY . . CMD [“npm”, “start”] docker-compose.yml services: app: build: . db: mysql:8 Dockerfileがすること: • 1つのアプリケーションをイメージにする手順 • 必要な環境(Node.jsなど)のインストール • アプリケーションコードの配置 docker-compose.ymlがすること: • 複数のイメージを組み合わせる • それぞれの設定(ポート、DB等)を定義 • イメージ同士の連携方法を指定

docker-compose コマンドでできること

  • docker-compose.yml を読み込み
  • 設定に従ってサービスを操作
  • Dockerfile からビルドも実行

docker-compose.yml は「何をどう動かすか」を定義し、docker-compose コマンドはその定義に従って実際の操作を行います。

通常 docker-compose コマンドを実行するディレクトリに docker-compose.yml ファイルが必要です

→docker-compose.ymlが存在しない場合
no configuration file provided: not found

Docker Compose コマンド体系 サービスのライフサイクル管理 docker-compose up サービスの作成と起動 -d: バックグラウンド実行 docker-compose down サービスの停止と削除 –volumes: ボリューム削除 start / stop サービスの起動/停止 特定サービスの指定可 restart サービスの再起動 docker-compose ps コンテナの状態表示 docker-compose logs ログの表示 -f: フォロー モード サービスの操作とビルド docker-compose exec コマンド実行 サービス内でコマンド実行 docker-compose run 一時的なコンテナ実行 –rm: 終了後に削除 docker-compose build サービスのビルド –no-cache: キャッシュ無効 設定と確認 docker-compose config 設定の検証と表示 docker-compose pull イメージの取得 docker-compose version バージョン情報表示

docker-compose up」 コマンドは、docker-compose.ymlに記述された複数のサービス(コンテナ)を一括で構築・起動するためのコマンド

docker-compose up [オプション] [サービス名]

# デタッチモード(バックグラウンド)で実行
docker-compose up -d

# コンテナを起動する前にイメージを再構築
docker-compose up --build

docker-compose logs コンテナのログを確認するためのコマンド

docker-compose logs [オプション] [docker-compose.ymlで定義されたサービス名(コンテナ名ではない)]

# webサービスのタイムスタンプ付きでリアルタイム監視し、最新20行だけ表示
docker-compose logs -f -t --tail=20 web

docker-compose execでサービス何でコマンドを実行、対話形式に入る

docker-compose exec [オプション] <docker-compose.ymlで定義されたサービス名(コンテナ名ではない)> <コマンド>

ブートプロセスとsystemd

  1. 電源投入
  2. ファームウェア(BIOS、UEFI)動作…マザーボード上のNVRAM(不揮発性メモリ)
    • ブートローダを呼び出す…現在GRUB2がよく使用される
    • 優先順位に従って各デバイスの先頭セクタのMBRを読み込む
  3. ブートローダ
    • kernel(Linuxの基本システム)とRAMディスク
    • ブートローダは起動されると、記憶装置(HDD)内のカーネルをロードし、制御を移します。
  4. カーネルを起動
    • メモリ初期化やハードウェア認識
  5. systemd、initでサービス(sshd、httpd、mysqld)起動
    • init:SysVinit(Sustem Five Init)将来
    • systemd:現在のLinuxで採用
  6. ログインプロンプト表示

UEFI

Unified Extensible Firmware Interface

IntelがBIOSにかわるインターフェイスとして考案したのが、UEFIです。

  • GUIでの操作をサポート
  • 3TBを超える大容量HDDからの起動をサポート

systemd

サービスを並列に起動することにより、起動が高速

Unit(処理単位)

  • systemctlで制御
  • 以下のタイプがあります
    • service(各種サービス起動)httpd、sshd等
    • device(デバイス)
    • mount(ファイルシステム)/etc/fstab
    • swap(スワップ領域の有効化。ディスクをメモリに)
    • target(複数Unitをグループ化)

ターゲット

ターゲット
(systemd)
ランレベル
(init)
default.targetシステム起動時のデフォルトのターゲット
sysinit.targetシステム起動時の初期段階のセットアップを行う
poweroff.target0システム終了
rescue.target1レスキュー(シングルユーザー)モード
multi-user.target2,3,4CUIログイン
graphical.target5グラフィカルログイン
reboot.target6システム再起動

systemctl

systemdが稼働するシステムの各サービスの管理はsystemctlコマンドを使用します。

systemctl サブコマンド Unit名

enable自動起動を有効
get-default次回起動時のターゲットを表示
set-default次回起動時のターゲットを設定
haltシステムを停止しhalt状態にする(停止)
poweroffシステムを停止し電源を切断
startサービスを起動
stopサービスを停止
restartサービスを再起動
is-activeサービスが稼働しているかを表示
isolateほかのUnitを停止し、対象のUnitを起動
rebootシステムを再起動

シャットダウン、再起動

シャットダウンや再起動は、systemctrコマンド以外にshutdownコマンドを使う方法があります。

shutdown [オプション] 時間 [メッセージ]
-hシャットダウンする
-rシャットダウン後再起動する
-f次回起動時にfsckをスキップする
-h、-rと併用する
-F次回起動時にfsckを実行する
-h、-rと併用する
-kシャットダウンせずに警告メッセージを通知
-cシャットダウンをキャンセルする

ssh

公開鍵認証 … 秘密鍵で暗号化→公開鍵で復号化(上記認証)

公開鍵暗号 … 公開鍵で暗号化→秘密鍵で復号化

プロセスの生成、監視、終了

プロセスという基本単位でOSは動作中のプログラムを管理します。

psコマンド

process status

psコマンドは現在実行中のプロセスを表示するときに使います。

aほかのユーザのプロセスも表示
f親子関係をツリー上で表示
uユーザ名を表示
xデーモン等表示
-eすべてのプロセスを表示
-f完全なフォーマットでプロセスを表示
-l詳細情報を表示
-p PID指定のPIDの情報を表示
-C プロセス名指定の名前の情報を表示
-w長い行は折返し

topコマンド

実行中のプロセスを継続的に監視するときに使用します。

killコマンド

killコマンドはプロセスにシグナルを送ります。プロセスはシグナルを受け取るとそれに応じた、動作を実行します。

シグナル名シグナルID動作
HUP1ハングアップ(端末が制御不能)
INT2キーボードからの割り込み(Ctrl + Cキー)
KILL9強制終了
TERM15終了(デフォルト)
CONT18停止しているプロセスを再開
STOP19一時停止
TSTP20端末から一時停止(Ctrl + Zキー)

killallコマンド

指定したコマンドを実行している全てのプロセスに対してシグナルを送します。

killall [-シグナル名、-シグナル番号] プロセス名(コマンド名)

pgrepコマンド

指定のプロセスのPIDを表示します。

-U、–uid ユーザ名実行ユーザーを指定
-G、–group グループ名実行グループを指定
-n、–newestもっとも新しいプロセスを選択
-o、–oldestもっとも古いプロセスを選択
-l、–list-nameプロセス名も表示

フォアグラウンドとバックグラウンド

bg

フォアグラウンドで実行中のジョブをバックグラウンドで実行する

fg

バックグラウンドで実行中のジョブをフォアグラウンドで実行する

端末の活用

tmux、screen

複数の画面で切り替えて作業を行えるソフトウェアです。

デスクトップ環境の利用

LinuxはGUIを実現する機能はそなわっていないです。

そこで、GUIをじつげんするためのシステムとしてX Window Systemが使われてきました。

X Window System

XサーバとXクライアントから構成されています。

ウィンドウマネージャ

X Window Systemの外観を制御しているのがウィンドウマネージャです。

twmは最小限の機能を備えたウィンドウマネージャです。

GUIの起動

startxコマンドでX Window Systemが起動します。(CUI環境‥ランレベル3)

ディスプレイマネージャ

  • ランレベル5で起動すると、ディスプレイマネージャはXサーバを起動し、GUIのログイン画面を表示させます。
  • initやsystemdによりディスプレイマネージャーサービスが起動されます。

xauth

xauthコマンドはXサーバの接続で使われる資格情報を表示したり、クライアント認証ファイルを編集するときに使います。

  • xauth listコマンドでXサーバごとの接続に使用される資格情報が表示されます。(Xサーバ側)
  • xauthのaddコマンドで、ユーザの~/.Xauthorityファイル(クライアント認証ファイル)にXサーバと同じ資格情報を保存し、Xサーバと資格情報が一致したユーザのみがアクセスできるようになります。(Xクライアント側)
ファイル・ディレクトリの操作と管理

ファイルの所有者とパーミッション

アクセス権

読み取りr
書き込みw
実行権x
権限ファイルの適用ディレクトリに適用
読み内容を参照内容を参照
書き書き込みファイルの新規作成、削除、名前変更
実行ファイルを実行ディレクトリのファイルにアクセス、ディレクトリへの移動

アクセス権の表記法

所有者グループその他ユーザ
記号表記:r w xr – xr – –
4 2 14 – 14 – –
数値表記:754

chmod

「change mode」

chmod [ オプション ] アクセス権 ファイル名
オプション … -R --recursive 指定した以下にある全ファイルのアクセス権を変更
オプション内容
-R –r指定したディレクトリのファイル全てのアクセス権を変更する
対象内容
u所有者
gグループ
oその他
a全ユーザ
種別内容
r読み取り
w書込み
x実行
sSUID、SGID
tスティッキービット

SUID、SGID

「Set User ID」、「Set Group ID」

SUID、SGIDは特殊なアクセス権です。

そのファイルを誰が実行しても所有者の権限・グループの権限で実行されることを意味します

SUIDを設定するには、

  • chmod 4755 file(3桁のアクセス権に4000を加える)
  • chmod u+s file(所有者に「s」という権限を追加します)

SGIDを設定するには、

  • chmod 2755 file(3桁のアクセス権に2000を加える)
  • chmod g+s file(グループに「s」という権限を追加します)

スティッキービット

自分以外の他のユーザが所有しているファイルを削除出来ないようにするには、スティッキービットをディレクトリに設定します。

  • 通常のパーミッションの値に1000を加えた値を設定する
  • その他ユーザに「t」という権限を追加する

umask

ファイルやディレクトリ作成時のデフォルトのアクセス権は、umask値で決まります。

  • ファイル … 666 – umask値
  • ディレクトリ … 777 – umask値

http://www.rivhiro-weather.com/knowledge/?p=168

chown

chown [ オプション ] ユーザ ファイル名/ディレクトリ名
chown [ オプション ] :グループ名 ファイル名/ディレクトリ名
オプション … -R --recursive 指定した以下にある全ファイルの所有者を変更

chgrp

chgrp [ オプション ] グループ ファイル名/ディレクトリ名
オプション … -R --recursive 指定した以下にある全ファイルの所有者を変更

ハードリンクとシンボリックリンク

ファイルの実体に名前を結びつける「ハードリンク」と、 名前に名前を結びつける「シンボリックリンク」の2つがあります。

iノード番号

Linuxではファイルを保存するとユニークな値でiノード番号が割り当てられます。

iノードにはファイルに関する属性情報が格納されています。

ハードリンク

  • iノード番号が同じ
  • ハードリンクが0になると、実体がはじめて削除されます
  • ファイルシステムが異なると作成できない
    です
  • ディレクトリのハードリンクは作成できません

シンボリックリンク

  • 別ファイルシステムへのリンク作成が可能
  • lsコマンドで確認するとパーミッションの先頭に「l」が表示される

ln

リンクの作成にはlnコマンドを利用します。

ln [-s‥シンボリックリンク] リンク元 リンク先

  • ハードリンクは異なるファイルシステムに作成できません。
  • ディレクトリのハードリンクは作成できません。

基本的なファイル管理の実行

ファイル操作コマンド

pwd

カレントディレクトリを表示する

「print working directory(作業ディレクトリを表示する)」

ls コマンド

カレントディレクトリのファイル一覧を表示します。

ls [オプション] [ファイル名、ディレクトリ名] 
ls -a
(all)
all、ドット(隠し)ファイルも表示
-d(dir)ディレクトリ自体の情報を表示
-Rサブディレクトリの内容も表示
ls -l
(long)
詳細情報を表示
出力例
-rw-r–r– 1 user group 1234 Jan 9 12:00 file.txt
-h(MB、KB)メガバイト、キロバイトの単位で情報を表示
-i(i-node)i-nodeの情報を表示

cd

カレントディレクトリをホームディレクトリに変更する

change directory

ホームディレクトリへのパス
cd
cd ~(チルダ展開)
ひとつ前に戻る
cd -

cp コマンド

fコピー先の既存のファイルやディレクトリが上書き出ない場合、削除してからコピーする
r、Rディレクトリを再起的にコピー
i同名のものがある場合、上書きするか問い合わせる
pファイルの属性を保持したままコピー

mv コマンド

ファイルやディレクトリを移動するときや名前を変えるときに使うコマンド

-f –force移動先に同名のファイルやディレクトリがある場合、上書きする
-i –interactive移動先に同名のファイルやディレクトリがある場合、上書きするか問い合わせる

mkdir コマンド

ディレクトリを作成するにはmkdirコマンドを利用します

-m –mode 指定したアクセス権でディレクトリを作成
-p –parents必要な場合親ディレクトリを作成する

rm コマンド

ファイルやディレクトリを削除できるコマンド。

-f –forceユーザへの確認なしで削除する
-i削除前にユーザに確認する
-r、-R –recursiveサブディレクトリを含めディレクトリ全体を再帰的に削除する

rmdir コマンド

空のディレクトリのみ削除できる

d ディレクトリ名に階層を指定した場合、削除するディレクトリの親ディレクトリを同時に削除するオプションです。

p 複数階層の空ディレクトリを削除する

※(区別)rm -r空ではないディレクトリも削除することができる

touch コマンド

  • ファイルのタイムスタンプを更新します
    • すでにあるファイルのタイムスタンプだけ更新する
    • touch -t MMDDHH mm filename
  • 空のファイルを生成します(本来はタイムスタンプを変更するコマンドでしたが、指定したファイルがない場合は新規作成する)
tアクセス時刻と修正時刻を指定した時刻に変更
aアクセス時刻を変更
m修正時刻を変更

gzip

gzip形式でファイルを圧縮するにはgzipコマンドを利用します。

元ファイルを残して標準出力に出力

-d –decompress圧縮ファイルを展開
-c –stdout標準出力へ出力
-k –keep圧縮、解凍後に元ファイルを削除しない
-r –recutsiveディレクトリ内の全ファイルを圧縮

gunzip

gunzipコマンドで展開できます。

bzip2

-d –decompress圧縮ファイルを展開
-c –stdout元ファイルを残して標準出力
-k –keep圧縮、解凍後に元ファイルを削除しない

bzip2 [オプション] [ファイル名]

xz

xz [オプション] [ファイル名]

-d –decompress圧縮ファイルの展開
-k –keep圧縮、展開後ファイルを削除しない
-l –list圧縮ファイルの情報を表示する

xz -dコマンドの代わりにunxzコマンドを使ってもかまいません。

tar

tape archive

複数のファイルをまとめて一つのアーカイブにしたり、アーカイブを展開するときに使うコマンド。

[作成するファイル名][圧縮するディレクトリ名]

c createアーカイブを作成
x extractアーカイブからファイルを展開
t listアーカイブの内容一覧を表示
f filenameアーカイブファイル名を指定
z gzipgzipを通して、圧縮/展開
j bzip2bzip2を通して、圧縮/展開
J xzxzを通して、圧縮/展開
v verbose処理の詳細を表示

dd

ブロックサイズとコピー回数を指定してファイルを作成できるコマンド。

if=入力ファイル入力ファイルを指定
of=出力ファイル出力ファイルを指定
bs= バイト数作成するファイルのブロックサイズを指定
count=回数回数分の入力ブロックをコピー

ファイルの配置と検索

FHS

Filesystem Hierarchy Standard

Linuxの標準的なディレクトリレイアウトを定めた標準かされている仕様

FHSさえ知っていればソフトウェア固有の知識のインプットをを最小限にすることができます。

/dev

デバイスファイルを入れるディレクトリ

/usr/bin

ユーザが一般的に使うコマンドがあります。システムの起動や、緊急時の保守には必須でないものです。

/etc

設定ファイルを入れるディレクトリ

/home

ホームディレクトリを入れるディレクトリ

ユーザが自由に操作できるユーザー名のディレクトリがあります。

man hier

HIER(7)			   Linux Programmer’s Manual		       HIER(7)
名前
       hier - ファイルシステム階層の説明
説明
       典 型的な Linux system には以下のようなディレクトリがある (他にもたくさ
       んのディレクトリがあるが):
       /      ルートディレクトリ。ここが階層の起点となる。
       /bin   このディレクトリには、シングルユーザーモードでシステムの起動や修
	      理を行う際に必要な実行形式ファイルが含まれる。
       /boot  ブートローダが用いる静的なファイルが含まれている。このディレクト
	      リにはブートプロセスの間に必要なファイルだけが置かれる。マップイ
	      ンストーラや設定ファイルは /sbin や /etc に置くべきである。
       /dev   物理デバイスを参照しているスペシャルファイルやデバイスファイルの
	      置き場所。 mknod(1) を参照のこと。
       /etc   マシン固有の設定ファイルが置かれる場所。X11 のような大規模なソフ
	      トウェアパッケージでは、 /etc 以下に更にパッケージ単位でサブディ
	      レクトリが作られることもある。サイト全体に有効な設定ファイルは、
	      ここではなく /usr/etc に置かれることもある。しかし、プログラムか
	      らのこれらのファイルの参照先は、常に /etc にす べ き で あ る 。
	      /usr/etc	以下のファイルに対しては、それらへのリンクを /etc に置
	      けばよい。
       /etc/opt
	      /opt にインストールされたアドオンアプリケーションが使う、ホス ト
	      固有の設定ファイルの置き場所。
       /etc/sgml
	      SGML や XML の設定ファイルの置き場所 (なくてもよい)。
       /etc/skel
	      新たにユーザーアカウントを作る際、通常このディレクトリにあるファ
	      イルがユーザーのホームディレクトリにコピーされる。
       /etc/X11
	      X11 window system の設定ファイルの置き場所 (なくてもよい)。
       /home  通常、ユーザーのホームディレクトリが、このディレクトリ直下ないし
	      サブディレクトリの下に作成される。このディレクトリの構成をどうす
	      るかは、ローカルマシンの管理者が決めることである。
       /lib   このディレクトリには、システムの起動時に必要な共有ライブラリや、
	      ルートファイルシステムでコマンドを実行するのに必要な共有ライブラ
	      リを置く。
       /media このディレクトリには、 CD/DVD ディスクや USB スティックなどの 取
	      り 外し可能メディア (removable media) 用のマウントポイントが置か
	      れる。
       /mnt   このディレクトリは、一時的にマウントするファイルシステム用のマウ
	      ントポイントである。ディストリビューションによっては、一時的にマ
	      ウントするファイルシステム用のマウントポイントとして、 /mnt 内に
	      サブディレクトリが用意されている場合がある。
       /opt   このディレクトリにはアドオンパッケージの静的なファイルが置かれる
	      。
       /proc  このディレクトリは proc ファイルシステムのマウントポイントである
	      。 proc ファイルシステムは、実行中プロセスやカーネルの情報を提供
	      する。この疑似ファイルシステムの詳細は、 proc(5) で説明されて い
	      る。
       /root   通常ここが root ユーザのホームディレクトリになる (なくてもよい)
	      。
       /sbin  /bin と同様に、このディレクトリにはシステムの起動に必要なコマ ン
	      ドが含まれる。ただしここには、一般ユーザーは通常実行しないコマン
	      ドが置かれる。
       /tmp   このディレクトリには、定期的なジョブによって、またはシステム起動
	      時に、無条件に削除して構わない一時的なファイルが置かれる。
       /usr   通常このディレクトリは、独立したパーティションがマウントされる。
	      ここには、共有可能で読み込み専用のものだけが含まれ、よっていろい
	      ろな Linux マシンからマウントできる。
       /usr/X11R6
	      X Window System, Version 11 release 6 (なくてもよい)。
       /usr/X11R6/bin
	      X	 Window	 System	  のバイナリの置き場所。古いディレクトリである
	      /usr/bin/X11 からここにシンボリックリンクが張られていることが 多
	      い。
       /usr/X11R6/lib
	      X Window System に関連するデータファイルの置き場所。
       /usr/X11R6/lib/X11
	      こ こ に は  X   の 動 作 に必要な種々のファイルが含まれている。
	      /usr/lib/X11 からここにシンボリックリンクが張られていることが 多
	      い。
       /usr/X11R6/include/X11
	      こ こには X11 Window System を使ったプログラムをコンパイルするた
	      めに必要なインクルードファイルが含まれている。  /usr/include/X11
	      からここにシンボリックリンクが張られていることが多い。
       /usr/bin
	      このディレクトリは、実行形式ファイルの主な置き場所である。システ
	      ムのブートやシステム復旧には必要とされない、一般ユーザーが利用す
	      るコマンドの多くは、ローカルにインストールされるのでない限り、こ
	      のディレクトリに置くべきである。
       /usr/bin/X11
	      X11 コマンドの伝統的な置き場所。Linux では、通常	/usr/X11R6/bin
	      にシンボリックリンクが張られている。
       /usr/dict
	      /usr/share/dict に置き換えられた。
       /usr/doc
	      /usr/share/doc に置き換えられた。
       /usr/etc
	      サイト内部の複数のマシンが共有するような設定ファイルが置かれる。
	      しかしながら、コマンドはそれらのファイルの参照先を、常に /etc に
	      すべきだろう。 /etc のファイルからリンクを張って、 /usr/etc の適
	      切なファイルを指すようにすべきである。
       /usr/games
	      ゲームプログラムや教育用プログラムのバイナリが含まれている (なく
	      てもよい)。
       /usr/include
	      C コンパイラ用のインクルードファイルが含まれている。
       /usr/include/X11
	      C	 コンパイラと X Window System 用のインクルードファイルが含まれ
	      ている。通常これは /usr/inlcude/X11 へのシンボリックリンクになっ
	      ている。
       /usr/include/asm
	      アセンブラ関数の宣言を行うインクルードファイルが含まれている。こ
	      のディレクトリは、以前は /usr/src/linux/include/asm へのシンボリ
	      ックリンクだった。
       /usr/include/linux
	      ここには、システムのリリースのたびごとに変更されうる情報が含まれ
	      る。ここは以前は /usr/src/linux/include/linux にシンボリックリン
	      クされており、オペレーティングシステム固有の情報が得られるように
	      なっていた。
	      (ここに置くインクルードファイルは、現在の libc およびユーザ空 間
	      で 正しく動作するものでなければならない。しかし Linux のカーネル
	      ソースはユーザプログラムといっしょに使うようには設計されていない
	      し 、 あなたが使っている libc も関知しない。 /usr/include/asm と
	      /usr/include/linux を適当なカーネルツリーへのリンクにしたりす る
	      と 、 破 綻 す る の は 目 に 見えている。 Debian ではこうせずに
	      、libc*-dev package が提供する、安定したカーネルバージョンのヘッ
	      ダファイルを置いている。)
       /usr/include/g++
	      GNU C++ コンパイラ用のインクルードファイルが含まれている。
       /usr/lib
	      オブジェクトライブラリ (ダイナミックライブラリも含む) と、直接に
	      は起動されないような実行形式ファイル少々とが置かれる。複雑なプロ
	      グラムでは、更にサブディレクトリがあるかもしれない。
       /usr/lib/X11
	      X	 のプログラムに関連するデータファイルと、 X Window System の設
	      定ファイルの置き場所。 Linux では通常 /usr/X11R6/lib/X11 にシ ン
	      ボリックリンクが張られている。
       /usr/lib/gcc-lib
	      GNU C コンパイラ gcc(1) 用の実行形式ファイルとインクルードファイ
	      ルが含まれている。
       /usr/lib/groff
	      GNU groff 文書整形システムのためのファイルが含まれている。
       /usr/lib/uucp
	      uucp(1) のためのファイルが含まれている。
       /usr/local
	      このディレクトリは、サイトローカルなプログラムがインストールされ
	      る典型的な場所である。
       /usr/local/bin
	      サイトローカルなプログラムが含まれている。
       /usr/local/doc
	      サイトローカルなドキュメントが含まれている。
       /usr/local/etc
	      サイトローカルにインストールされたプログラムの設定ファイルの置き
	      場所。
       /usr/local/games
	      サイトローカルにインストールされたゲームのバイナリの置き場所。
       /usr/local/lib
	      サイトローカルにインストールされたプログラムの関連ファイルの置き
	      場所。
       /usr/local/include
	      ローカルな C コンパイラのヘッダファイルの置き場所。
       /usr/local/info
	      サイトローカルにインストールされたプログラムの info ページの置き
	      場所。
       /usr/local/man
	      サイトローカルにインストールされたプログラムのマニュアルページの
	      置き場所。
       /usr/local/sbin
	      サイトローカルにインストールされたシステム管理コマンドの置き場所
	      。
       /usr/local/share
	      同じ OS ならアーキテクチャが異なっても共有できる、ローカルなアプ
	      リケーションデータの置き場所。
       /usr/local/src
	      サイトローカルにインストールされたソフトウェアのソースコードの置
	      き場所。
       /usr/man
	      /usr/share/man に置き換えられた。
       /usr/sbin
	      このディレクトリには、システム管理コマンドが含まれる。ここに置か
	      れるコマンドは、ブートプロセスや /usr のマウント、システムの修理
	      などに必要なものであってはならない。
       /usr/share
	      このディレクトリには、アプリケーションごとに固有なデータ ( 同 じ
	      OS  ならアーキテクチャが違っていても共有できるもの) がサブディレ
	      クトリ単位で置かれる。以前には /usr/doc, /usr/lib, /usr/man など
	      にあった内容が、多くここに置かれている。
       /usr/share/dict
	      スペルチェッカ用の単語リストが含まれる。
       /usr/share/doc
	      インストールされたプログラムのドキュメントの置き場所。
       /usr/share/games
	      /usr/games に置かれたゲーム用の静的なデータファイルの置き場所。
       /usr/share/info
	      info ページが置かれる。
       /usr/share/locale
	      ロケール (locale) 情報が置かれる。
       /usr/share/man
	      マニュアルページ。各ページはセクションに応じたサブディレクトリに
	      置かれる。
       /usr/share/man//man[1-9]
	      これらのディレクトリには、各ロケールのマニュアルページのソースが
	      置かれている。すべてのマニュアルページで同じ言語とコードセットを
	      使用するシステムでは、  は省略されることがある。
       /usr/share/misc
	      同じ OS ならアーキテクチャが違っていても共有できる、雑多なデータ
	      の置き場所。
       /usr/share/nls
	      母 国語サポート (native language support) 用のメッセージカタログ
	      の置き場所。
       /usr/share/sgml
	      SGML や XML のファイルの置き場所。
       /usr/share/terminfo
	      terminfo のデータベースが置かれる。
       /usr/share/tmac
	      groff と一緒には配布されていない troff マクロの置き場所。
       /usr/share/zoneinfo
	      タイムゾーン情報のファイルが置かれる。
       /usr/src
	      システム上の色々なコンポーネントのソースファイル (参照用のパッケ
	      ージも含む) の置き場所。この場所で自分のプロジェクトの作業をして
	      はいけない。 /usr 以下のファイルはソフトウェアのインストールの時
	      以外は読み込み専用になっているべきだからである。
       /usr/src/linux
	      かつてはカーネルソースの伝統的な置き場所だった。ディストリビュー
	      ションによっては、出荷時のデフォルトのカーネルのソースをここに置
	      いている。自分でカーネルをビルドするときは別の場所を使うほうがい
	      いだろう。
       /usr/tmp
	      今では用いられなくなった。このディレクトリは /var/tmp へのリンク
	      にすべきである。このリンクは互換性のためだけにあり、もはや使うべ
	      きでない。
       /var   このディレクトリには、スプールファイルやログファイルのような、サ
	      イズが変化するファイルが置かれる。
       /var/adm
	      このディレクトリは /var/log に置き換えられた。ここは /var/log へ
	      のシンボリックリンクにすべきである。
       /var/backups
	      歴史的な理由からまだ残っている。
       /var/cache
	      プログラムのためにキャッシュされたデータの置き場所。
       /var/catman/cat[1-9] or /var/cache/man/cat[1-9]
	      これらのディレクトリには、整形済みのマニュアルページが、ページの
	      セクションに従って置かれている。 (整形済みマニュアルページの利用
	      は推奨されていない。)
       /var/cron
	      歴史的な理由からまだ残っている。
       /var/lib
	      プログラムの状態に関する情報のうち、可変なものの置き場所。
       /var/local
	      /usr/local 用の可変データの置き場所。
       /var/lock
	      ロックファイルの置き場所。デバイスのロックファイルの命名は、慣習
	      と して LCK.. とされている。ここで  はファイルシ
	      ステム上でのデバイス名である。利用されているフォーマット は  HDU
	      UUCP  のロックファイルのものである。すなわち各ロックファイルには
	      アスキー 10 進数値文字で表記した PID 10 バイトと、それに続いて改
	      行文字とが含まれている。
       /var/log
	      種々のログファイルの置き場所。
       /var/opt
	      /opt 用の可変データの置き場所。
       /var/mail
	      ユ ーザのメールボックスの置き場所。 /var/spool/mail を置き換えた
	      。
       /var/msgs
	      歴史的な理由からまだ残っている。
       /var/preserve
	      歴史的な理由からまだ残っている。
       /var/run
	      実行時の可変ファイルが置かれる。例えばプロセス識別子 (PID) を 保
	      持するファイルや、ユーザのログイン情報ファイル (utmp) などである
	      。ここのファイルは、通常システム起動時に削除される。
       /var/spool
	      色々なプログラムのスプールファイル (あるいはキューファイル) の置
	      き場所。
       /var/spool/at
	      at(1) のジョブスプール。
       /var/spool/cron
	      cron(8) のジョブスプール。
       /var/spool/lpd
	      印刷用のスプールファイルが置かれる。
       /var/spool/mail
	      /var/mail に置き換えられた。
       /var/spool/mqueue
	      キューイングされた送信メールの置き場所。
       /var/spool/news
	      ニュースのスプールディレクトリ。
       /var/spool/rwho
	      rwhod(8) のスプールファイルの置き場所。
       /var/spool/smail
	      メール配送プログラム smail(1) のスプールファイルの置き場所。
       /var/spool/uucp
	      uucp(1) のスプールファイルの置き場所。
       /var/tmp
	      /tmp  と似ているが、このディレクトリに置かれる一時的なファイルは
	      保存期間の制限がない。
       /var/yp
	      NIS のデータベースファイルの置き場所。
準拠
       The  Filesystem	Hierarchy  Standard,  Version  2.2   .
バグ
       こ のリストは網羅的なものではない。個々のシステムでは異なる部分があるか
       もしれない。
関連項目
       find(1), ln(1), proc(5), mount(8)
       The Filesystem Hierarchy Standard
Linux				  2001-09-07			       HIER(7)

locateコマンド

検索用データベースで高速にファイル名ディレクトリ名の検索を行います。

updatedbコマンド

locateコマンドが利用する検索用のデータベースを更新します。

findコマンドし

指定ディレクトリからファイル、ディレクトリを検索します。

find [検索起点ディレクトリ] [検索式] [アクション]

whichコマンド

環境変数PATHに基づき検索します。

whereisコマンド

指定コマンドのバイナリーファイル、ソースコード、マニュアルファイルの場所を検索します。

typeコマンド

jQuery

jQueryとは

JavaScriptのためのライブラリです。

JavaScriptの長い記述を短く書くことができ、複雑なJavaScriptを簡単に使うことができます。

jQueryでできること

  • HTML、CSSの操作
  • 表示、非表示
  • アニメーション

jQueryのデメリット

  • jQueryの読み込みによる遅延
  • 古いもので、現在対応しておらず、動作しないものがある

CDNによる読み込み

公式サイト

  • 最新バージョンである3系で
  • 特に理由がなければminified

https://releases.jquery.com
  • jQueryを読み込む場所はheadタグ内、もしくはbody閉じタグ直前で読み込み
    ブラウザの表示を遅らせないためにbody閉じタグ直前が無難です。
  • 自作のjsファイルよりも先に読み込む
    • <script src="https://code.jquery.com/jquery-3.7.1.min.js" integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script>
      <script src="my-script.js"></script>

Google CDN

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>

https://developers.google.com/speed/libraries?hl=ja#jquery

自作のjsファイルの記述

$(function () {
 // jqueryの処理を記述 
});
※上記は省略形で下記の記述が省略しない場合
jQuery(document).ready(function(){ //HTMLの読み込み後、記述した処理の開始を意味しています
  // jqueryの処理を記述
});

jQueryイベントのバブリングとは?

バブリングとは、イベントが発生した要素の親要素、祖先要素にも同様のイベントが発生することです。

バブリングの挙動を理解したうえで、jQueryを使用しないと予想外の問題が起きてしまいます。

return falseでバブリングを回避することが可能です。

slickの使い方(カルーセルスライダー)

slickはjQueryを使用したスライダーを作成することができるプラグインです。

カスタマイズ性もあり、色んな場面で導入できます。

https://kenwheeler.github.io/slick

slickの使い方

導入方法

  1. サイトからファイルにダウンロード
  2. CDNを利用

1.ファイルをダウンロードする場合

公式サイトから get it now のメニューの Download Now からダウンロード

下記のファイルが必要となります

  • slick.css
  • slick-theme.css
  • slick.min.js
<!-- css -->
<link rel="stylesheet" href="slick/slick.css">
<link rel="stylesheet" href="slick/slick-theme.css">
<link rel="stylesheet" href="style.css"> //自分で記述するcssファイル
<!-- js -->
<script src="https://code.jquery.com/jquery-3.7.1.min.js" integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script> //jQueryの読み込み
<script src="slick/slick.min.js"></script>
<script src="main.js"></script> //自分で記述するjsファイル

2.CDNを利用する場合

公式サイトから get it now のメニューから下記のようにコピペすればOK(※slick-theme.cssのリンクがない?

※2023年10月時点
<!-- css -->
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.css"/>
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.9.0/slick-theme.css">
<link rel="stylesheet" href="style.css"> //自分で記述するcssファイル

<!-- js bodyタグ終了直前-->
<script src="https://code.jquery.com/jquery-3.7.1.min.js" integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script> //jQueryの読み込み
<script type="text/javascript" src="//cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.min.js"></script>
<script src="main.js"></script> //自分で記述するjsファイル

↑jsファイルをheadタグ内で読み込むと正しく動かない場合がある?

slickのトラブル

実装してみると、なぜか横スクロールが発生してしまいました。
→overflow: hidden;をあてて解消しました。

snow-monkeyだとうまく動かない?

jsファイルはheadタグ内もしくは、bodyタグ終了直前?

slickをWordPressで使用

https://bizlabo.site/?p=1243
https://siennahare23.sakura.ne.jp/wp-lesson/slick

swiper

スライダーの実装では、jQueryライブラリのSwiperがあります。

https://kiomiru.co.jp/blog/coding/swiper-js

jquery.inview

inview.jsは要素がビューポートに入ったらクラスを付与することにより、いろんなイベントを発生させることができます。

手順 1) jsファイルをダウンロード

下記サイトよりダウンロードします。

「jquery.inview.min.js」が必要になります。

https://github.com/protonet/jquery.inview

手順 2) ファイルを読み込む

読み込んだファイルをディレクトリに配置し、htmlから読み込みの記述をします。

<script src="js/jquery.inview.min.js"></script>

※jQueryも読み込みます。

手順 3) htmlファイルにクラスを設定

<div class="your-fade"></div>

手順 4) CSSにフェード前後のスタイルを記述

// フェードイン前
.your-fade {
    opacity: 0;
    visibility: hidden;
    transform: translateY(40px);
    transition: 1s;
}

// フェードイン後
.inview {
    opacity: 1;
    visibility: visible;
    transform: translateY(0px);
}

手順 4) jsファイルにコードを記述

$(function () {
    $(".your-fade").on("inview", function () {
        $(this).addClass("inview");
    });
});

toggleClass

toggleClassメソッドはjQueryを使って、引数に指定したクラスを追加したり、削除することができます。

toggleClassの使い方

$("要素").toggleClass("クラス名");

要素‥クラスを追加、削除する対象
クラス名‥追加、削除するクラス名

scrollTop()メソッド

scrollTop()メソッドはスクロール位置を取得することができます。

スクロール量を取得

対象要素.scrollTop();

※一般的なスクロール位置(ブラウザ全体)を取得する場合、対象要素をwindow

スクロール位置を設定し移動

引数の数値の位置まで移動します

対象要素.scrollTop()

※値を設定することで、その位置まで移動

fadeIn() fadeOut()

fadeIn()は非表示になっている要素に対してフェードインのアニメーションを付与することができます。

要素.fadeIn( 時間 );

lightbox

lightboxは画像をクリックすると拡大し、ポップアップ表示させたい場合に使用するJavaScriptライブラリです。

lightbox導入手順

lightboxのサイトで必要ファイルをダウンロードします。

https://lokeshdhakar.com/projects/lightbox2

最新バージョンからzipファイルをダウンロード

必要ファイルを該当ディレクトリにおく

必要なファイルは解凍したフォルダのdistフォルダ内にあります(表示速度が気になる場合に有効な圧縮版の軽量化されているminを使います)

  • lightbox.min.css
  • lightbox.min.js
  • images(フォルダ)

例として下記のように配置した場合

  • index.html
  • css
    • lightbox.min.css
  • js
    • lightbox.min.js
  • images
    • close.png
    • loading.gif
    • next.png
    • prev.png
  • 拡大表示させた画像

ファイルの読み込み

htmlファイルに読み込みするため記述します

headタグ内<link rel="stylesheet" href="css/lightbox.min.css" />

body閉じタグ前に

<!-- jQueryの読み込み -->
<script
src="https://code.jquery.com/jquery-3.7.1.min.js"
integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo="
crossorigin="anonymous"
></script>

<!-- lightbox.min.jsの読み込み -->
<script src="js/lightbox.min.js"></script>
https://blanche-toile.com/web/javascript-lightbox

ScrollHint

画面幅を超えた横幅を横スクロールで表示する際、ブラウザによってスクロールバーの表示は常にしているとは限らないので、
ユーザビリティの観点からこちらのライブラリでスクロールできることを明示することをお勧めします。

実装例:

https://siennahare23.sakura.ne.jp/oocss/#scrollh

実装方法

1)必要ファイルの読み込み

CDNの場合(headタグ内):

<link rel="stylesheet" href="https://unpkg.com/scroll-hint@latest/css/scroll-hint.css">
<script src="https://unpkg.com/scroll-hint@latest/js/scroll-hint.min.js"></script>

2)jsファイルの編集

new ScrollHint('.js-scrollable');
$(function(){
  new ScrollHint('.js-scrollable');
});

js-scrollableは任意のクラス名です

2)htmlファイルの編集

<div class="js-scrollable" style="overflow-x: scroll;">
 <table>

 …画面幅を超えるコンテンツ
この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。この文章はダミーです。この文章はダミーです。この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。
この文章はダミーです。この文章はダミーです。この文章はダミーです。この文章はダミーです。この文章はダミーです。この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。この文章はダミーです。
この文章はダミーです。この文章はダミーです。この文章はダミーです。この文章はダミーです。この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。この文章はダミーです。この文章はダミーです。
この文章はダミーです。この文章はダミーです。この文章はダミーです。この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。この文章はダミーです。この文章はダミーです。この文章はダミーです。
https://jito-site.com/scrollhint-usage-option

Web制作で使うJS

JavaScriptはプログラミング言語で学習しようとすると、とても範囲が広いですがWeb制作で使うのは比較的基礎的な内容です。(Web開発とは違います)

オススメの基本的な学習法

  • プロゲート
  • ドットインストール
  • Codejump
https://code-jump.com/#coding-js

サンプルページ

https://siennahare23.sakura.ne.jp/jquery-design-lesson
【PHP技術者認定試験問題】リクエスト情報、メールフォーム

スーパーグローバル変数

  • どのスコープでも有効で無常記念でアクセス可能
  • global命令不要

$_POST

<form method="POST">タグでフォームから送信されたデータをポストデータといいます。

$_GET

$_GET … クエリ情報

クエリ情報とはURLの末尾「~?」以降の「キー名=値」でセットされる情報です。

$_SERVER

リクエスト情報やサーバー変数を示します。

ヘッダー情報

PHPでメールフォームを作成

コード内容

  • phpinfo.php
  • contactform.php

phpinfo.php

phpinfo()はPHPの情報を確認でき、PHPが動いている環境か確認できます。

<?php
phpinfo();
?>

contactform.php

<?php
  session_start();

  $mode = 'input';
  $errmessage = array();

  if( isset($_POST['back']) 
  // backという配列のキーがそもそも存在しているか
  // Noticeという注意文が出てしまう

  && $_POST['back'] ){
  // 空ではないか

  // if( $_POST['back']) {
    
  } else if( isset($_POST['confirm']) && $_POST['confirm'] ) {
  // 確認画面

    // 名前のバリデーション(入力チェック)
    if( !$_POST['fullname'] ) {
	    $errmessage[] = "名前を入力してください";
    } else if( mb_strlen($_POST['fullname']) > 100 ){
	    $errmessage[] = "名前は100文字以内にしてください";
    }
	  $_SESSION['fullname'] = htmlspecialchars($_POST['fullname'], ENT_QUOTES);
    // サニタイズ(無害化)

    // メールのバリデーション
    if( !$_POST['email'] ) {
      $errmessage[] = "Eメールを入力してください";
    } else if( mb_strlen($_POST['email']) > 200 ){
      $errmessage[] = "Eメールは200文字以内にしてください";
    } else if( !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) ){
      $errmessage[] = "メールアドレスが不正です";
    }
    $_SESSION['email'] = htmlspecialchars($_POST['email'], ENT_QUOTES);

    // お問い合わせ内容のバリデーション
    if( !$_POST['message'] ){
		  $errmessage[] = "お問い合わせ内容を入力してください";
	  } else if( mb_strlen($_POST['message']) > 500 ){
		  $errmessage[] = "お問い合わせ内容は500文字以内にしてください";
	  }
	  $_SESSION['message'] = htmlspecialchars($_POST['message'], ENT_QUOTES);

    if( $errmessage ){
	    $mode = 'input';
    } else {
	    $mode = 'confirm';
    }

  } else if( isset($_POST['send']) && $_POST ) {
    $message = "お問い合わせを受け付けました。\r\n"
              . "名前: " . $_SESSION['fullname'] . "\r\n"
              . "email: " . $_SESSION['email'] . "\r\n"
              . "お問い合わせ内容:\r\n"
              . preg_replace("/\r\n|\r|\n/", "\r\n", $_SESSION['message']);
	  mail($_SESSION['email'],'お問い合わせありがとうございます',$message);
    mail('xx@gmail.com','お問い合わせありがとうございます',$message);
    $_SESSION = array();

    $mode = 'send';

  } else {
    $_SESSION['fullname'] = "";
    $_SESSION['email']    = "";
    $_SESSION['message']  = "";
  }
?>

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>お問い合わせフォーム</title>
</head>
<body>

  <?php if( $mode == 'input' ) { ?>
    <!-- 入力画面 -->
    <h2>入力画面</h2><br>
    <?php
    if( $errmessage ){
      echo '<div style="color: red;">';
      echo implode('<br>', $errmessage );
      echo '</div>';
    }
    ?>
    <form action="./contactform.php" method="post">
      name<input type="text" name="fullname" value="<?php echo $_SESSION['fullname'] ?>"><br>
      email<input type="email" name="email" value="<?php echo $_SESSION['email'] ?>"><br>
      お問い合わせ内容<br>
      <textarea name="message" id="" cols="30" rows="10">
        <?php echo $_SESSION['message']; ?>
      </textarea><br>
      <input type="submit" name="confirm" value="確認">
    </form>

  <?php } else if( $mode == 'confirm' ){ ?>
    <!-- 確認画面 -->
    <h2>確認画面</h2><br>
    <form action="./contactform.php" method="post">
      name  <?php echo $_SESSION['fullname']; ?><br>
      email <?php echo $_SESSION['email']; ?><br>
      お問い合わせ内容 <br>
      <?php echo nl2br($_SESSION['message']); ?><br>
      <input type="submit" name="back" value="戻る" />
      <input type="submit" name="send" value="送信" />
    </form>
    
  <?php } else { ?>
    <!-- 完了画面 -->
    <h2>送信完了画面</h2><br>
    送信しました。お問い合わせありがとうございました。<br>
  <?php } ?>
 
  <?php
  print_r($_POST );
  ?>
  
</body>
</html>
https://siennahare23.sakura.ne.jp/hinkon/contactform.php

メールフォームのセキュリティについて

クロスサイトスクリプティング対策

htmlspecialcharsという関数を使いエスケープ処理を行います。

スクラッチ以外の利用

実際はWordPressのプラグインやメールフォームのライブラリ(PHPMailer、Laravel)を使用するのが鉄板で無難です。

完全なセキュリティは難しい

セキュリティを十分に考慮されたシステムには、それなりにコストがかかります。

制作しているサイトが、相応の重要なデータを扱っているかを考える必要があります。

【PHP技術者認定試験問題】リクエスト情報

リクエスト情報を取得、操作するためのスーパーグローバル変数 8
$_POSTPOST形式で渡された情報
$_GETクエリ情報経由で渡された情報
$_FILESアップロードされたファイルに関する情報
$_SERVERリクエストヘッダー、またはサーバー固有の変数情報
$_ENVサーバー側で定義された環境変数
$_COOKIEクッキー経由で渡された情報
$_SESSIONセッション経由で渡された情報
$_REQUEST$_GET、$_POST、$_COOKIEの値をまとめて管理
ユーザーからの入力値をブラウザーに表示させる場合の注意点

htmlspecialchars()関数でエスケープすることで、クロスサイトスクリプティング攻撃を防ぎます

主なサーバー変数 7
$_SERVER[‘PHP_SELF’]Webサーバに要求するURL
$_SERVER[‘SERVER_NAME’]PHPは実行されているWebサーバの名前
$_SERVER[‘SERVER_ADDR’]IPアドレス
$_SERVER[‘REQUEST_METHOD’]リクエストのメソッド名
$_SERVER[‘REMOTE_ADDR’]ユーザの IP アドレス
$_SERVER[‘REMOTE_HOST’]現在のページにアクセスしているホストの名前
$_SERVER[‘QUERY_STRING’]検索引数
・名前「name」、値「value」有効期限30日後のクッキーを発行してください
・クッキーを即座に破棄してください
setcookie('name', 'value', time() + 60 * 60 * 24 * 30);
setcookie('name', 'value', time() - 3600);
クッキーを定義する関数は
setcookie(name, value, expire, path, domain, secure, httponly)

1.name … クッキーの名前
2.value … クッキーの値
3.expire … 有効期限
4.path … URLのパス
5.domain … 有効なドメイン
6.secure … secure属性(HTTPS通信時のみ許可)
7.httponly … httponly属性(JavaScriptによるクッキーの操作を防ぐ)

【PHP技術者認定試験問題】ユーザ定義関数、標準クラスライブラリ

ユーザ定義関数

・ユーザ定義関数で引数、戻り値を明示的に指定すること
・記述方法
・型名 6

宣言型

function ファンクション名 (引数の型 引数, 引数の型 引数): 戻り値の型 {
  …
}
bool真偽値
float浮動小数点数
int整数
string文字列
callableコールバック関数
void何も返さない(戻り値のみ指定可)
指定化
下記のprocessNumberは$num、…を引数$funcで処理し、結果を配列として返す関数です。

function processNumber( 1 $func, float …$args): array {
foreach ( 2 as $arg) {
$result[] = 3;
}
return $result;
}
4 $x, $y 5 = processNumber(
fn($num) 6
5, 15);
function processNumber( callable $func, float ...$args): array {
  foreach ( $args as $arg) {
    $result[] = $func($arg);
  }
  return $result;
}
[ $x, $y ] = processNumber(
  fn($num) => $num**2
  5, 15);

標準クラスライブラリ

日付文字列「2023年8月3日」を、DateTimeクラスを使ってかいせきし、「YYYY/MM/DD(曜日)」の形式で出力してください
$dt = 1::2(‘Y年m月d日’, ‘2023年8月3日’);
print $dt->3(‘Y/m/d (D)’);
$dt = DateTime::createFromFormat('Y年m月d日', '2023年8月3日');
print $dt->format('Y/m/d (D)');
format文字
j、d、D、n、m、M、y、Y、g、G、i、s
j日付(1~31)
d日付(01~31)
D曜日(Mon~Sun)
n月(1~12)
m月(01~12)
M月(Jan~Dec)
y年(2桁)
Y年(4桁)
g時(1~12)
G時(0~23)
i分(0~59)
s秒(0~59)
インスタンスメソッドの呼び出し

->アロー演算子

日付/時刻を指定のフォーマットで整形するメソッド

format

$dt = 1 2(‘2022/8/4 10:26:30’);
print $dt->3(‘Y年m月d日 H時i分’); // 結果:2022年08月04日 10時26分
$dt->4(1 5(‘P1YT10H’));
print $dt->3(‘Y年m月d日 H時i分’); // 結果:2023年08月04日 20時26分
$dt = new DateTime('2022/8/4 10:26:30');
print $dt->format('Y年m月d日 H時i分');  // 結果:2022年08月04日 10時26分
$dt->add(new DateInterval('P1YT10H')); 
print $dt->format('Y年m月d日 H時i分');  // 結果:2023年08月04日 20時26分
$dt1 = new 1(‘2020/8/20 10:38:32’);
$dt2 = new 1(‘2023/12/10’);
$interval = $dt1->2($dt2, true);
$dt1 = new DateTime('2020/8/20 10:38:32');
$dt2 = new DateTime('2023/12/10');
$interval = $dt->diff($dt2, true);
・指定されたフォルダーにディレクトリ配下のファイル情報にアクセスするためのクラス
・上記クラスの主なメソッド
 ・ファイルがフォルダーであるか
 ・ファイルが通常のファイルであるか
new DirectoryIterator(string $path)
  • is_dir($path)
  • is_file($path)
Shadcn/UI 入門:React で洗練された UI コンポーネントを作る

こんにちは! 今回は、React のプロジェクトで洗練された UI コンポーネントを簡単に作成できる「shadcn/ui」について紹介します。Web 開発をしていると「もっとスタイリッシュなコンポーネントを作りたいけど、手間がかかるなあ…」と感じたことはありませんか?Shadcn/ui はそんな悩みを解決してくれる強力なツールです!


Shadcn/UI って何?

shadcn/ui は、React や Next.js プロジェクトに簡単に統合できる UI コンポーネントライブラリです。このツールは、デザインの美しさと使いやすさに重点を置いており、あらかじめスタイリングされたコンポーネントが豊富に揃っています。デフォルトで美しいスタイルを持っているので、開発者はデザインに悩まずに素早くページを作成できます。

特徴

  • 洗練されたデザイン:すぐに使える美しいデザインが標準で搭載。
  • カスタマイズ性:基本スタイルを維持しつつ、自分のプロジェクトに合わせて簡単に調整可能。
  • 開発スピード向上:手間をかけずに UI を組み込めるので、実装にかかる時間を大幅に短縮。

Shadcn/UI を使ってみる

それでは、実際に Shadcn/UI をインストールし、React プロジェクトに組み込んでみましょう。以下では、インストールから基本的な使用方法までを説明します。

1. インストール

まず、以下のコマンドを使って Shadcn/UI をインストールします。

npm install shadcn-ui

インストールが完了したら、React または Next.js プロジェクトに shadcn/ui をインポートして使えるようになります。

2. 基本的な使い方

例えば、ボタンコンポーネントを作りたい場合、以下のように Button コンポーネントを使います:

import { Button } from 'shadcn-ui';

function App() {
  return (
    <div>
      <Button onClick={() => alert("ボタンがクリックされました!")}>クリック!</Button>
    </div>
  );
}

export default App;

このコードを実行すると、下のような美しいボタンが表示されます。

3. コンポーネントのカスタマイズ

shadcn/ui のコンポーネントは、カスタマイズも簡単です。例えば、ボタンの色を変えたり、サイズを調整する場合、Button コンポーネントのプロパティを設定するだけで見た目を変更できます。

<Button color="primary" size="large">カスタムボタン</Button>

おすすめのコンポーネント

Shadcn/UI には、ボタン以外にも以下のような便利なコンポーネントが用意されています:

  1. カード (Card)
    コンテンツを整理して表示するのに最適。
  2. モーダル (Modal)
    ポップアップウィンドウを簡単に追加可能。
  3. トグル (Toggle)
    スイッチのようなオンオフの切り替え UI。

カスタムテーマの設定

Shadcn/UI では、デフォルトのテーマをプロジェクトに合わせて変更することもできます。カスタムテーマの設定は以下のように行います:

import { ThemeProvider } from 'shadcn-ui';

function App() {
  return (
    <ThemeProvider theme="dark">
      <Button>ダークテーマボタン</Button>
    </ThemeProvider>
  );
}

まとめ

shadcn/ui は、React や Next.js のプロジェクトでおしゃれで使いやすい UI を簡単に構築できる強力なツールです。デザインに時間をかけずにプロジェクトの UI を整えたい方に特におすすめです。興味のある方はぜひインストールして試してみてください!

Docker 環境で WordPress を使用している場合「アップロードされたファイルが php.ini の upload_max_filesize ディレクティブを越えています。」について

upload_max_filesize」と関連する設定を変更手順

1)カスタム php.ini ファイルを作成

custom-php.ini という名前のファイルを作成し、以下の内容を追加

※docker-compose.ymlと同じディレクトリに作成

upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 128M

※値は必要に応じて調整してください。

2)docker-compose.yml ファイルを編集

services:
  wordpress:
    image: wordpress:latest
    volumes:
      - ./custom-php.ini:/usr/local/etc/php/conf.d/custom-php.ini
    # 他の設定...

3)コンテナを再起動

docker-compose down
docker-compose up -d

再起動後、再度WordPressインストールし最大アップロードサイズを確認すると変更されているのが確認できました

PHPサンプルコード

標準入力

<?php
    // 標準入力がHelloの場合こんにちはを出力

    $greeting = trim(fgets(STDIN));
    if ($greeting == "Hello") {
        echo "こんにちは\n";
    }
?>
<?php
    // 1. 標準入力から文字列を 1 個受け取る
    // 2. その文字列が「Hello」に等しい場合、次のメッセージを表示する
    // こんにちは
    // 3. 「Hello」に等しくない場合、次のメッセージを表示する
    // AAAはHelloではない    ※AAAに、その文字列を当てはめる

    $name = trim(fgets(STDIN));
    if ($name == "Hello") {
        echo "こんにちは\n";
    } else {
        echo $name . "はHelloではない\n";
    }
?>

文字変換

<?php
// ファイル名に含まれる長さ 2 以上のハイフンをすべて長さ 1 にしたファイル名を文字列で出力してください。
// ファイル名の文字列は100字以内

$stdin = trim(fgets(STDIN));

for($i = 100; $i >= 1; $i--){ 

    $repeat_count = $i;
    $text = str_repeat("-", $i);

    $stdin = str_replace($text, "-", $stdin);
}

echo $stdin;
?>

複数行入力

<?php

// ・1 行目には、あなたの食べたい料理名を表す文字列 S が与えられます。
// ・2 行目には、与えられるメニューの単語数を表す整数 N が与えられます。
// ・3 行目には、メニュー名を表す単語の文字列 T_i (1 ≦ i ≦ N) が半角スペース区切りで与えられます。
// ・入力は全部で 3 行となり、最終行末尾に改行が一つ入ります。
// 与えられたメニューがあなたの食べたい料理であれば "Yes" を、そうでなければ "No" を出力してください。

// 標準入力を一行ずつ配列に代入
while ($stdin = trim(fgets(STDIN))) {
    $stdin_array[] = $stdin;
}

$my_menu = $stdin_array[0];

$menu_count = --$stdin_array[1];

$menu_array = explode(' ',$stdin_array[2]);

for($i = 0; $i <= $menu_count; $i++){ 

    $menu_word = $menu_array[$i];


    
    // "Yes" を、そうでなければ "No"
    if ($my_menu == $menu_word) {
        echo "Yes";
        break;
    } elseif ($my_menu != $menu_word && $i == $menu_count) {
        echo "No";
        break;
    }
}

?>

多重ループ
多次元配列

<?php

// ・1 行目にクラスの人数を表す整数 N が与えられます。
// ・続く N 行のうちの i 行目 (1 ≦ i ≦ N) には、i 番目の生徒が投票したクラスメイトの名前 a_i が与えられます。
// ・入力は合計で N + 1 行となり、入力値最終行の末尾に改行が 1 つ入ります。
// ・最も得票数の多い人は 1 人のみです。

while ($stdin = trim(fgets(STDIN))) {
    $stdin_array[] = $stdin;
}

$num_peaple = $stdin_array[0];

for($i = 1; $i <= $num_peaple; $i++) { 

    $count = 0;

    for($j = $i; $j <= $num_peaple; $j++) {

        if ($stdin_array[$i] == $stdin_array[$j]) {

            $count++;

        }

    }
    
    // 多次元配列値追加
    $count_array[] = [$stdin_array[$i], $count];
}


// 抽出
$cols = array_column($count_array, 1); 
// echo print_r($cols);

array_multisort($cols, SORT_DESC, $count_array);
// echo print_r($count_array);

echo $count_array[0][0];

?>
Webセキュリティを考慮してフォーム作成
  • 正常系をまず作成
  • 異常系を考える、テストする、キリがない
  • マストな異常系をルール化する(経験がものをいう)
  • 失敗する前提で記述
  • 失敗のログがでるように
  • 時間をおいてお試してください
  • SQLインジェクション、CSRF
    →参考:体系的に学ぶ 安全なWebアプリケーションの作り方 第2版[固定版] 脆弱性が生まれる原理と対策の実践

POSTリクエストはContent-Typeはapplication/json

POSTリクエストを使うとき、サーバーにデータを送信する形式を示すために「Content-Type」というヘッダーを設定する

application/json

  • JSON形式でデータを送信するときに使います。
  • 例えば、フォームデータをJavaScriptでオブジェクトにして送信したい場合に利用します。

正常系を完成させる

フロントエンドからのフォームデータ送信

script.jssendMail 関数で、axiosを使ってフォームデータをsendMailer.phpに送信しています​(script)。まず、データが正しくサーバーに送信されているかを確認します。

PHP側でのデータ受信とレスポンス

sendMailer.php で、送信されたデータを受け取り、PHPMailerを用いてメールを送信する処理を追加します。現状のコードでは、PHPMailerの処理が未実装ですので、これを追加します。

フロントエンドでの成功メッセージの表示

メール送信が正常に完了した場合、フロントエンドで成功メッセージを表示させます。すでに sendMail 関数内でレスポンスに基づく処理が行われているため、サーバーから成功レスポンスが返ってきた際に次のページにリダイレクトするか、成功メッセージを表示するように設定します。

memo

デフォルトでは Content-Type が application/json になりますが、PHP で $_POST を使用してデータを取得するには application/x-www-form-urlencoded 形式で送信する必要がある

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>フォーム送信</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="form_wrap">
        <form class="form" onSubmit="handleSubmit(event)" name="cta_form">
            <p class="form_title">form</p>
            <div class="form_area">
                <!-- メールアドレス入力欄 -->
                <input class="form_input" type="email" name="email" placeholder="メールアドレス" required>
                <div class="err" id="emailError"></div>
                
                <!-- 電話番号入力欄 -->
                <input class="form_input" type="tel" maxlength="11" name="tel" placeholder="例) 09012345678" required>
                <div class="err" id="telError"></div>

                <!-- 送信ボタン -->
                <button class="submit" type="submit">送信</button>
            </div>
        </form>
    </div>
    <div id="formMessage" class="form_message"></div>

    <!-- JavaScriptの読み込みをbodyの最後に移動 -->
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    <script src="script.js"></script>
</body>
</html>
$(document).ready(function () {
    async function sendMail(formData) {
        try {
            const url = "https://siennahare23.sakura.ne.jp/1104_tokuform/sendMailer.php";
            console.log("送信データ:", formData);

            const res = await axios.post(url, JSON.stringify(formData), {
                headers: {
                    "Content-Type": "application/json",
                },
            });

            const json = res.data;
            console.log("サーバーからのレスポンス:", json);

            return { success: json.status === "success", data: json };
        } catch (error) {
            console.error("PHPへの送信エラー:", error);
            return { success: false, error: error };
        }
    }

    window.handleSubmit = async function (event) {
        event.preventDefault();
        const form = event.currentTarget;

        // 入力要素の取得
        const emailInput = form.querySelector('input[name="email"]');
        const telInput = form.querySelector('input[name="tel"]');
        const emailValue = emailInput.value;
        const telValue = telInput.value;

        // 電話番号とメールアドレスのバリデーション
        if (telValue.length !== 11 || !/^\d{11}$/.test(telValue)) {
            document.getElementById("telError").innerText = "11桁の電話番号を入力してください";
            return;
        } else {
            document.getElementById("telError").innerText = "";
        }

        if (!/^[\w\.-]+@[\w\.-]+\.\w+$/.test(emailValue)) {
            document.getElementById("emailError").innerText = "有効なメールアドレスを入力してください";
            return;
        } else {
            document.getElementById("emailError").innerText = "";
        }

        // フォームデータの収集
        const data = new FormData(form);
        const formData = Object.fromEntries(data.entries());

        const result = await sendMail(formData);

        // メッセージ表示要素を取得
        const messageDiv = document.getElementById("formMessage");

        // 成功・失敗のメッセージを表示
        if (result.success) {
            messageDiv.innerText = result.data.message || "メールが正常に送信されました";
            messageDiv.style.color = "green";
        } else {
            messageDiv.innerText = result.data.message || "送信エラーが発生しました。再度お試しください。";
            messageDiv.style.color = "red";
        }
    };
});
<?php
// 設定ファイルの読み込み
require_once '/home/siennahare23/config/config.php';

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'vendor/autoload.php';

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // JSON データの取得と解析
    $input = file_get_contents('php://input');
    $data = json_decode($input, true);

    // 入力データの取得
    $email = filter_var($data['email'], FILTER_SANITIZE_EMAIL);
    $tel = filter_var($data['tel'], FILTER_SANITIZE_STRING);

    // デバッグ情報の出力
    // echo '取得したメールアドレス: ' . htmlspecialchars($email) . '<br>';
    // echo '取得した電話番号: ' . htmlspecialchars($tel) . '<br>';

    // メールアドレスの検証
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        echo '無効なメールアドレスです: ' . htmlspecialchars($email);
        exit;
    }

    // 電話番号の検証
    if (!preg_match('/^\d{11}$/', $tel)) {
        echo '無効な電話番号です: ' . htmlspecialchars($tel);
        exit;
    }

    // デバッグ情報の出力
    // echo '送信先メールアドレス: ' . htmlspecialchars($email) . '<br>';
    // echo '送信先電話番号: ' . htmlspecialchars($tel) . '<br>';

    $mail = new PHPMailer(true);

    try {
        // SMTP設定
        $mail->isSMTP();
        $mail->Host       = SMTP_HOST;
        $mail->SMTPAuth   = true;
        $mail->Username   = SMTP_USER;
        $mail->Password   = SMTP_PASS;
        $mail->SMTPSecure = SMTP_SECURE;
        $mail->Port       = SMTP_PORT;

        // エンコーディングの設定
        $mail->CharSet = 'UTF-8';
        $mail->Encoding = 'base64';

        // 送信者と受信者の設定
        $mail->setFrom(SMTP_USER, 'Mailer'); // 送信者
        $mail->addAddress($email); // 受信者

        // メール内容の設定
        $mail->isHTML(true);
        $mail->Subject = 'フォーム送信内容';
        $mail->Body    = 'メールアドレス: ' . htmlspecialchars($email) . '<br>電話番号: ' . htmlspecialchars($tel);
        $mail->AltBody = 'メールアドレス: ' . htmlspecialchars($email) . "\n電話番号: " . htmlspecialchars($tel);

        // メール送信
        $mail->send();
        echo json_encode(['status' => 'success', 'message' => 'メッセージが送信されました']);

    } catch (Exception $e) {
        echo json_encode(['status' => 'error', 'message' => "メッセージを送信できませんでした。エラー: {$mail->ErrorInfo}"]);
    }
} else {
    echo json_encode(['status' => 'error', 'message' => 'POSTメソッドで送信してください。']);
}
?>
All-in-One WP Migration

インポート容量を引き上げる方法

All-in-One WP Migrationではインポートの容量制限があるため、ファイルサイズが1GB以上のものは、データ移行ができません。

インポート容量上限をあげるには以下の方法があります。

  • 有料版を使う
  • 無料版の容量を上げる

有料版に関しては、All-in-One WP Migration unlimited extensionの買い切り版は販売が終了しており、1年ごとのサブスクリプションとなっています。

無料版all-in-one wp migrationの容量を上げる方法 パート1

1.「all-in-one wp migration ver.6.68」をダウンロード

↑2024/03/04問題なく使用可能

2. インストール

3. ソースコードを編集

「all-in-one wp migration」プラグインの「constants.php」ファイルにて編集します。

* 20 を末尾に追記します。

// =================
// = Max File Size =
// =================
define( 'AI1WM_MAX_FILE_SIZE', 536870912 * 20 );
https://www.caliberelectronics.com/all-in-one-wp-migration/

無料版all-in-one wp migrationの容量を上げる方法 パート2(2024/01/10)

ローカル環境の場合

php.iniを編集します。

テーマフォルダ/con/php/php.ini.hbs

レンタルサーバの場合

よくあるエラー

インポートが終わらない

  • データベースが読み込めない。
  • php のバージョンが一致していない。

SiteGuard WP Pluginとの相性

データ移行後WordPressにログインできないトラブルが起きることがあります。(ログインページが404

プラグイン「SiteGuard WP Plugin」が原因の場合があります。無効化後データ移行をする必要があります。

https://design-pull.com/wordpress/6812/
PHP8準上級試験 攻略ガイド 模擬問題解説

参考サイト

PHP8上級/準上級試験
https://www.phpexam.jp/summary/expert8

Python試験とPHP試験の無料模擬試験サイト
https://study.prime-strategy.co.jp

PHP8技術者認定上級試験合格体験記
https://qiita.com/Bakio202076/items/bb930d93847b06044e6a

プログラミング初心者のPHP修羅の道#4〜PHP8上級問題を徹底追求する〜
https://hiro-hobbyblog.com/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%88%9D%E5%BF%83%E8%80%85%E3%81%AEphp%E4%BF%AE%E7%BE%85%E3%81%AE%E9%81%93%EF%BC%834%E3%80%9Cphp8%E4%B8%8A%E7%B4%9A%E5%95%8F%E9%A1%8C/#google_vignette

試験概要

準上級試験は、PHPの基本的な知識と実践的なスキルを証明する資格です。上級との主な違いは、出題範囲の深さと合格ラインにあります。

上級との比較:

  • 準上級:合格ライン65%以上、基本的な実装力
  • 上級:合格ライン70%以上、応用的な設計力


項目準上級上級
合格ライン65%以上70%以上
出題レベル基本的な実装力応用的な設計力
設計スキル基本的なOOP設計デザインパターン
セキュリティ基本的な対策高度な脆弱性対策
データベース基本的なSQL操作パフォーマンスチューニング

基本情報

  • 試験時間:90分
  • 問題数:75問
  • 形式:マークシート
  • 受験料:15,000円(税込)

学習範囲

PHP8準上級試験 出題範囲

  1. PHP基礎
    • 変数とデータ型
    • 制御構文
    • 関数
    • 名前空間
  2. オブジェクト指向
    • クラスとオブジェクト
    • 継承
    • インターフェース
    • トレイト
  3. データベース
    • PDO基礎
    • 基本的なSQL
    • トランザクション
  4. セキュリティ
    • XSS対策
    • CSRF対策
    • パスワード管理
  5. Web基礎
    • HTTP基礎
    • REST API
    • JSON処理

解説記事一覧

PHP基礎

error_reporting() 関数

スクリプト実行中に発生するエラーや警告をどの程度表示・ログ出力するかを制御する仕組み

代表的なエラーレベル一覧

エラーレベル意味・概要
E_ERROR1致命的な実行時エラー。即座にスクリプトの実行が停止するようなエラー。
E_WARNING2警告。スクリプトの実行は続行されるが、修正が必要な可能性がある状況。
E_PARSE4コンパイル時パースエラー(文法エラー)。通常はスクリプト自体が動かない。
E_NOTICE8注意。不正確な使い方かもしれないが、致命的ではない場面で発生。
E_ALL~0すべてのエラー・警告・通知を含む。(バージョンにより値は微妙に異なる)

PHP のバージョンが上がるにつれて、新しいエラーレベルが追加・変更される場合があります

PHP の「代表的なデータ型」

bool型(論理型)true(真) または false(偽) の 2つしか値を持たない、論理値 を表す型
string型(文字列型)「文字列」
array型(配列型)複数の値1つの変数 でまとめて扱う型です。
PHP では「連想配列」も同じ array 型で扱います。
object型(オブジェクト型)
null型変数が「値を持っていない状態」を表す特殊な型です。s
resource型PHP で ファイル操作データベース接続画像処理 などを行うときに使われる「外部リソース」を示す型。
callable型関数として呼び出せるもの」を表す型です。

float型 問2

PHP には単精度型がなく、「float」という名前で倍精度に相当する 1 種類の浮動小数点数型が存在しています。(「float / double」“単精度 / 倍精度”という 2 種類の浮動小数点数型が多言語では一般的)

名前区間 問3

名前空間とは:

  1. ファイルやクラスを整理する仕組み
  2. フォルダ構造をプログラム上で表現する方法

「PHPMailer」の場合:

実際のファイル構造 📁 phpmailer/ └📁 phpmailer/ ├📄 PHPMailer ├📄 SMTP └📄 Exception 名前空間での表現 PHPMailer\PHPMailer\ ├ PHPMailer ├ SMTP └ Exception

バックスラッシュ(\)の使用について

バックスラッシュを使う主なケース:

  1. PHPの標準クラスを使用する時(例:\DateTime)
  2. 違う名前空間のクラスを使用する時
  3. 現在の名前空間と異なる場所にあるクラスを指定する時

オブジェクト指向

インスタンスメソッド

$foo = new Foo();           // まずインスタンス生成
$result = $foo->myMethod(2, 3);  // インスタンス経由で呼び出し
class Car $color $speed drive() new Car() Instance $color = “red” $speed = 0 drive()

this

Instance ($car) function drive() { $this->speed = 60; $this->color = “red”; } $this

static メソッド

static メソッド」は、インスタンスを生成せずに 呼び出せます。

クラス名::メソッド名(引数...) // で直接コール。
class Car static function getInfo() { // $this は使用不可 ❌ return self::$info; } インスタンス化せずに使用するため、 $thisは存在しません

static メソッドはオブジェクトのインスタンスを生成せずにコールするため、疑似変数 $this は、 static として宣言されたメソッドの内部から利用することはできない。(問3)

self

self::は自クラスを表し、$thisは自身のオブジェクトを表す

selfstaticの違い:
staticは、実行時のクラスコンテキストに基づいて参照されるため、継承されたクラスでも柔軟に対応できます。一方、selfは定義時のクラスを指すため、継承時の柔軟性がありません。

継承

parent::の目的

親クラスの機能を子クラスで「再利用」するためのキーワードです(親クラスのメソッドを子クラスでオーバーライド(再定義)した場合)

親クラス Animal eat() { … } 子クラス Dog parent::eat()

インターフェイス

トレイト

抽象メソッドとは

  • abstractキーワードを使用して宣言

abstract class Animal {
    // 抽象メソッド - 実装を持たない
    abstract public function makeSound();
    
    // 通常のメソッド - 実装を持つ
    public function sleep() {
        echo "Zzz...";
    }
}

class Dog extends Animal {
    // 抽象メソッドの実装が必須
    public function makeSound() {
        echo "Woof!";
    }
}
abstract class Animal abstract makeSound() sleep() { echo “Zzz…” } extends class Dog makeSound() { echo “Woof!” } 抽象クラス: ・抽象メソッドを含むことができる ・インスタンス化できない ・通常メソッドも持てる 継承クラス: ・抽象メソッドの実装が必須 ・インスタンス化可能

アクセス修飾子

アクセス修飾子は、クラスのプロパティやメソッドの可視性(アクセス範囲)を制御するキーワードです。

宣言の前に使用します

アクセス修飾子を指定しない場合、 public

アクセス修飾子の種類と範囲 public どこからでもアクセス可能(クラスの外部からも) protected 自分のクラスと継承したクラスからのみアクセス可能 private 自分のクラスの中でのみアクセス可能

コンストラクタは「最初の設定をする特別な関数」

  • 新しいものを作るときの「最初の設定」
  • 必ず必要な情報を設定できる
  • クラスから実体(インスタンス)を作る時に自動的に動く
クラス User 定義 コンストラクタ定義 必須パラメータ: name, age オブジェクト生成 new User(“John”, 25) 定義された必須パラメータを渡す コンストラクタ実行 自動的に__constructが実行 渡されたパラメータで値を設定 class User { function __construct($name, $age) { // ここで必須パラメータを定義 }

子クラスで新しいコンストラクタを定義すると、親のコンストラクタは自動で呼ばれない 問4

子クラスで新しいコンストラクタを定義した場合コンストラクタを継承する場合でもparent::__construct()の呼び出しが必要です。

親クラス User function __construct($name) { $this->name = $name; } 子クラス BasicUser // コンストラクタなし 自動呼び出し ✓ 子クラス AdminUser function __construct($name, $role){} 自動呼び出しなし ✗ $basic = new BasicUser(“John”); // 親のコンストラクタが自動実行 $admin = new AdminUser(“John”, “admin”); // 要parent::__construct()

デストラクタとは?

デストラクタは、オブジェクトが破棄(削除)される時に自動的に呼び出されるメソッドです。 PHPでは __destruct() という名前で定義します。

クラス継承において親クラスのデストラクタは自動的に呼び出されます。問4

クラスの継承とメソッドの呼び出し順序 親クラス (Parent) • __construct() • __destruct() 子クラス (Child) • __construct() • __destruct() コンストラクタ: 明示的な呼び出しが必要 デストラクタ: 自動的に呼び出される デストラクタの実行順序:子クラス → 親クラス

マジックメソッドとは

__call() 問4

特定の状況下で自動的に呼び出されます。マジックメソッドは、すべて名前が二重のアンダースコア__)で始まるのが特徴です。

メソッド名役割使用例・説明
__construct()クラスのインスタンスが生成される際に自動的に呼び出されるコンストラクタ。オブジェクトの初期化処理を行う。
php<br>public function __construct($name) {<br> &nbsp;&nbsp;$this->name = $name;<br>}
__destruct()クラスのインスタンスが破棄される際に自動的に呼び出されるデストラクタ。リソースの解放や終了処理を行う。
php<br>public function __destruct() {<br> &nbsp;&nbsp;echo "オブジェクトが破棄されました。";<br>}
__get($property)存在しないプロパティにアクセスしようとしたときに呼び出される。動的にプロパティを取得する。
php<br>public function __get($name) {<br> &nbsp;&nbsp;return $this->data[$name] ?? null;<br>}
__set($property, $value)存在しないプロパティに値を設定しようとしたときに呼び出される。動的にプロパティを設定する。
php<br>public function __set($name, $value) {<br> &nbsp;&nbsp;$this->data[$name] = $value;<br>}
__call($method, $arguments)存在しないメソッドを呼び出そうとしたときに呼び出される。動的にメソッドを処理する。
php<br>public function __call($name, $args) {<br> &nbsp;&nbsp;echo "メソッド {$name} は存在しません。";<br>}
__toString()オブジェクトを文字列として扱おうとしたときに呼び出される。オブジェクトを文字列に変換する際の挙動を定義。
php<br>public function __toString() {<br> &nbsp;&nbsp;return "オブジェクトの文字列表現";<br>}
__invoke()オブジェクトを関数として呼び出したときに呼び出される。オブジェクトを関数のように使用する。
php<br>public function __invoke($x) {<br> &nbsp;&nbsp;return $x * 2;<br>}
__clone()オブジェクトがクローンされたときに呼び出される。クローン時のカスタム処理を実装。
php<br>public function __clone() {<br> &nbsp;&nbsp;$this->property = "クローンされた値";<br>}
__sleep()serialize() 関数が呼び出されたときに呼び出される。オブジェクトのシリアライズ前に実行する処理を定義。
php<br>public function __sleep() {<br> &nbsp;&nbsp;return ['property1', 'property2'];<br>}
__wakeup()unserialize() 関数が呼び出されたときに呼び出される。オブジェクトのアンシリアライズ後に実行する処理を定義。
php<br>public function __wakeup() {<br> &nbsp;&nbsp;// 再接続などの処理<br>}
__serialize()PHP 7.4以降で serialize() が呼び出されたときに使用される。オブジェクトのシリアライズ方法をカスタマイズ。
php<br>public function __serialize() {<br> &nbsp;&nbsp;return ['property1' => $this->prop1];<br>}
__unserialize()PHP 7.4以降で unserialize() が呼び出されたときに使用される。オブジェクトのアンシリアライズ方法をカスタマイズ。
php<br>public function __unserialize($data) {<br> &nbsp;&nbsp;$this->prop1 = $data['property1'];<br>}

クラスの中で定義して使用します。存在しないメソッドや、アクセスできないメソッドが呼び出された時に自動的に実行されるメソッドです。

class Person {
    public function __call($method, $arguments) {
        echo "存在しないメソッド「{$method}」が呼ばれました!\n";
        echo "渡された引数: " . implode(', ', $arguments) . "\n";
    }
}

$person = new Person();
$person->someUndefinedMethod("さいとう", 25);  // 明らかに定義されていないメソッド名

// 出力:
// 存在しないメソッド「someUndefinedMethod」が呼ばれました!
// 渡された引数: さいとう, 25
class Person { public function __call($method, $arguments) { … } } 未定義メソッドの呼び出し __call()が自動実行 1. 定義されていないメソッドが呼ばれると… 2. 自動的に__call()マジックメソッドが実行されます

__invoke() 問5

class Hoge {
    public function __invoke() {
        var_dump($this);  // このオブジェクトの状態を出力
        return 'string';
    }
}

// 1. オブジェクトの作成
$obj = new Hoge();
// この時点でのオブジェクトの状態:
// - Hogeクラスのインスタンス
// - プロパティは0個(空)
// - __invoke()メソッドを持っている

// 2. オブジェクトを関数として呼び出し
$r = $obj();
// ここで何が起きているか:
// - $objを関数として呼び出す($obj())
// - 自動的に__invoke()メソッドが実行される
// - var_dump($this)が実行され、オブジェクトの状態が表示される
// - 'string'が返され、$rに代入される

// 3. 結果の出力
var_dump($r);
// $rには'string'が格納されている

オーバーロードとは

PHPにおける「オーバーロード」は、クラス内で存在しないプロパティやメソッドにアクセスしようとした際に、特定のマジックメソッド(例: __get(), __set(), __call() など)が自動的に呼び出され、動的なプロパティやメソッドの処理を可能にします。

PHPのマジックメソッド(オーバーロードメソッド)は、必ずpublicで定義する必要があります

プロパティのオーバーロード: __get(), __set(), __isset(), __unset() などのプロパティオーバーロード用のマジックメソッドは、**インスタンスメソッド(非static)**として定義する必要があります。

メソッドのオーバーロード: 一方、メソッドオーバーロード用のマジックメソッド(例: __call(), __callStatic())には、staticコンテキスト専用のメソッドも存在します。特に __callStatic() は静的メソッドとして定義されます。

Difyローカル開発環境セットアップガイド
https://dify.ai/jp

ローカル環境で動かすメリット

  1. セキュリティ管理
    • 機密データや会社の情報をローカルで完全に管理可能
  2. カスタマイズの自由度
    • 環境設定やモデルの詳細な調整が可能
    • 必要に応じてソースコードの修正も可能
  3. コスト管理
    • クラウド利用料金の削減
    • リソース使用量の直接的なコントロール
  4. 開発効率
    • ローカルでの即時デバッグが可能
    • 開発サイクルの短縮

Dockerセットアップ手順

1. リポジトリのクローン

プロジェクトディレクトリにて公式のリポジトリをクローンします

git clone https://github.com/langgenius/dify.git .

2. Docker起動

cd .\docker\
docker-compose up -d

Dockerのリソース制限 初回起動時のコンテナビルド処理でロードに時間がかかる場合あります

まずは、test@test.comなどのテストアカウントで設定を進め、基本的な動作を確認することをお勧めします。その後、必要に応じて実際のメールアドレスに変更することもできます。

Dify での OpenAI の設定

「設定」→「Model Provider」

APIキーのみを入力

チャットボット作成

Web公開

「公開する」から「ウェブサイトに埋め込む」で下記の通りWeb上にアップできます

注意)Docker起動しておかないと接続はできません

選択肢(1)OpenAI APIキーを使用(Dify標準)

  • メリット:
    • 設定が簡単
    • GPT-4の高性能な応答
    • 日本語対応が完璧
  • デメリット:
    • 質問内容がOpenAIサーバーに送信される
    • コストがかかる
    • APIキー管理のリスク

選択肢(2)ローカルAIモデル(完全オフライン)

  • メリット:
    • データが外部に漏れない
    • ランニングコストなし
    • カスタマイズ可能
  • デメリット:
    • セットアップが複雑
    • 計算リソースが必要
    • GPT-4より性能は劣る

Tiny-Llamaとは

  • Meta社のLlamaモデルを小型化したバージョン
  • オープンソースで商用利用可能
  • 元のLlamaの機能を維持しながら、サイズを大幅に縮小

バリエーション

Tiny-Llama-1.1B: 基本モデル
Tiny-Llama-Chat: チャット特化
Tiny-Llama-Code: プログラミング特化

必要スペック

最小構成:
- メモリ:4GB以上(8GBのPCで動作可能)
- CPU:一般的なCore i3/i5でOK
- ストレージ:3GB程度の空き容量

参考外付けSSD

容量が不足しそうであれば外付けSSD

推奨スペック:
- 容量:最低128GB以上
- タイプ:USB 3.0/3.1以上
- 読み書き速度:500MB/s以上
通常のLlama-2: 7GB-70GB
Tiny-Llama: 約1.1GB-2GB
GPT-3: 175GB以上
容量速度特徴
Samsung T7500GB〜2TB500MB/s以上信頼性が高く、ポータブルで耐衝撃性もあるため、持ち運びにも適しています。
Sandisk Portable SSD250GB〜2TB500MB/s以上コストパフォーマンスが良く、一般的な使用に十分な性能です。
Crucial X8500GB〜2TB1050MB/s以上耐久性が高く、速度も速いので、長期間の使用に向いています。

APIキーの設定

  • 右上のプロファイルアイコン → Settings をクリック
  • 左メニューの「API Keys」を選択
  • OpenAI APIキーを入力




参考サイト

https://note.com/en2enzo/n/nb1d179215a37
PHP

Contents

PHPの概要

PHPはサーバサイドスクリプト言語(Webサーバ実行される)です。

PHPの動作環境

CGI(Common Gateway Interface※)規格をサポートするWebサーバで機能します。

※Webサーバでプログラムを実行する仕組み

テキストと数の操作

ホワイトスペース

ホワイトスペースを入れることで、プログラムの可読性が上がります。

半角スペース、タブ、改行がホワイトスペースとしてみなされます。

演算子

代数演算子
算術演算子
+ – * / % ++ — など
比較演算子== === !== < > <= >= ?:
論理演算子&& and || or xor !
ビット演算子& | ^ << >> など
その他文字列演算子()、実行演算子(`)、
エラー制御演算子()

比較演算子

==左辺と右辺が同じ値
===左辺と右辺が同じ値で同じデータ型
<=>
宇宙船演算子
左辺が右辺より小さい場合は-1、左辺んが右辺と等しい場合は0、
左辺が右辺より大きい場合は1
??左辺がnullでなければその値、左辺がnullであれば右辺の値、
左辺も右辺もnullであればnull

エスケープ

単一引用符

単一引用符(’ ‘)は特殊文字はそのまま文字列として動作します。

二重引用符

二重引用符(” “)は特殊文字は意味する値として動作します。(変数展開変数のParse

\n改行
\r復帰
\tタブ
\\\
\$$

ヒアドキュメント

長い文字列を変数に代入したり、出力するときに使います。

<?php
$変数 = <<<_DATA_
 
「文字列を記述」
 
_DATA_;
?>
<?php
echo = <<<_DATA_
 
「文字列を記述」
 
_DATA_;
?>

配列

作成方法

1. $配列名 = array(値1, 値2, …); 

2. $配列名[キー] = 値;
<?php
$ary = array(20, 21, 27, 29, 32);
foreach ($ary as $aryi) {
    print $aryi."<br/>\n";
}
?>

//結果
20
21
27
29
32

連想配列

文字列をキーとした配列

配列関数

sort関数

sort()配列の値を昇順に並べる
asort()連想配列の値を、キーと値の関係を保持しつつ昇順に並べる
ksort()キー配列のキーをキーと値の関係を保持しつつ昇順に並べる
rsort()配列の値を降順に並べる
arsort()連想配列の値、をキーと値の関係を保持しつつ降順に並べる
krsort()キー配列のキーをキーと値の関係を保持しつつ降順に並べる
explode($d, $str)$str(文字列)を$d(文字列)で分割し、配列を返す
implode($d, $ary)$ary(配列)を$d(文字列)で連結し、文字列を返す

関数

function

ユーザ独自の関数を定義します。

function 関数名(引数) {
//処理内容
}
  • 引数は変数以外は指定できません。

関数の呼び出し

  • 関数の呼び出すときは、関数名と引数※を記述します。
    ※引数の指定がなければデフォルト値を使用します。(引数に値を指定すればその値がデフォルト値より優先されます。)
  • 関数名の大文字と小文字は区別されません。
  • 先頭の文字はアルファベットまたはアンダースコア
  • 2文字目以降はアルファベット、アンダースコア、数字
function 関数名(引数 = デフォルト値) {
//処理内容
}

return

関数から値を返す際記述します。

  • 関数が何も値を返さない場合returnは省略できます。
  • 複数の値を返す場合は配列に格納します。

ユーザー定義関数

ユーザーが独自に定義した関数。

組み込み関数

PHPにはじめから用意されている関数。

文字列関数

printf
(フォーマット,フォーマット中に変換する値)
フォーマットされた文字列を出力
mb_strlen()文字列の長さ
strlen()はマルチバイト文字に対応していない
substr($string, 開始位置, 長さ)文字列の一部を取り出す
「print substr(‘abcde’, 0, 3);」の実行結果は「abc」
str_replace
(置換前の文字列, 置換後の文字列, $string)
一部の文字列を置き換える
trim()文字列前後の空白を取り除く
ucwords()最初の文字を大文字にする
strtolower()すべて小文字にする
strtoupper()すべて大文字にする

変数

命名規則

  1. 「$名前」
  2. 名前の先頭は文字か_(アンダースコア)
  3. 名前の2文字以降は2.に加えて数字も可
  4. 大文字、小文字は区別される

スコープ

グローバル変数

関数の外部で定義された変数

ローカル変数

関数内で定義された変数

  • 関数内で有効

global

global命令を利用すると、関数ブロック内で強制的にグローバル変数にわりあてることができます。

$num = 30;
foo();
function foo() {
 global $num;
 print $num;
}

$GLOBALS

グローバル変数は通常、関数外部のみで有効になりますが、配列$GLOBALSは関数内でもアクセスが可能です。

$num1 = 30;
foo();
function foo() {
 print $GLOBALS['num'];
}

オブジェクト

オブジェクトはデータ(変数)とデータを操作する関数の集合体です。

オブジェクトはクラスをインスタンス化したものです。

クラス

新しくオブジェクトを生成するためのひな型で、クラスからオブジェクトは生成されます。

  • classで定義する
class Msg{ // Carクラス

// プロパティ
public $color; // アクセス範囲をプロパティ前に記述

// メソッド
public function start(){ // 開始
echo '開始します';
}
}

アクセス権

publicどこからでもアクセス可能
protectedクラス自身、継承したクラス、親クラスが使用可能
private定義したクラスのみ使用可能
  • varを使って宣言したプロパティは、publicとして定義されます。
  • アクセス権を設定せずに定義したメソッドは、publicと同等となります。

インスタンス

クラスから生成された実体。

newキーワードを使ってインスタンスを作成します。

new クラス名();

$obj = new Person();

オブジェクトとインスタンスの違い

「インスタンス化」と「オブジェクトの生成」は同じ意味を表すことになります。
また、オブジェクトとは、さまざまな実体の総称であり、インスタンスもオブジェクトの1つとなします。

プロパティ

クラスで定義された変数。

インスタンスのプロパティを設定するには、->キーワードを使います。

$インスタンス名 -> プロパティ名

静的メソッド

静的メソッドはクラス自体で保持しているメソッドです。

インスタンス化しなくても利用できます。

$thisをつかうことができません。

クラス名::静的メソッド名()

コンストラクタ

オブジェクトがインスタンス化されるときに自動的に呼び出されるメソッドです。

__constructで定義されます。

サブクラス

サブクラスを定義すると、既存のクラスを再利用することができます。

サブクラスを作成するにはextendsキーワードをつかいます。

class サブクラス名 extends クラス名
  • 基本的に親クラスで定義したメソッドプロパティをサブクラスで記述せずに使用できます。

名前空間

名前空間を定義することで、クラスや関数がその空間に所属していると区別ができるようになります。
→クラス名や関数名の重複によるエラーを防ぐことができます。

名前空間でクラスを定義する場合、ファイルの先頭でnamespaceキーワードと名前空間名をし記述します。

namespace 名前空間名;

階層構造

名前空間は階層構造を持たせることができます。

階層は ¥¥(バックスラッシュ)で区切り記載します。

use キーワード

エイリアスの作成

名前空間で定義されたクラスを呼び出すとき、簡単な別名(エイリアス)を使うことができます。

エイリアスを指定するには use 名前空間 as エイリアス;と記載します。

名前空間のインポート

use 名前空間;と記述することで名前空間をインポートすることができます。

ユーザとの情報交換:Webフォームの作成

$_SERVER

$_SERVER(サーバー変数)Webサーバが生成するヘッダ情報、パス情報、スクリプトの位置情報情報を使うときに使用します。

<!-- サンプルコード -->

<?php
//現在実行しているスクリプトのファイル名です。
echo $_SERVER['PHP_SELF']."<br/>\n";
//現在のスクリプトが実行されているサーバの IP アドレスです。
echo $_SERVER['SERVER_ADDR']."<br/>\n";
?>
$_SERVER[‘PHP_SELF’]Webサーバに要求するURL
$_SERVER[‘SERVER_NAME’]PHPは実行されているWebサーバの名前
$_SERVER[‘SERVER_ADDR’]IPアドレス
$_SERVER[‘REQUEST_METHOD’]リクエストのメソッド名
$_SERVER[‘REMOTE_ADDR’]ユーザの IP アドレス
$_SERVER[‘REMOTE_HOST’]現在のページにアクセスしているホストの名前
$_SERVER[‘QUERY_STRING’]検索引数

フォームで利用する関数

filter_input()

フォームで送信される内容をチェックします。

filter_input(判定対象, 判定する内容)

filter_input(INPUT_POST, 'id', FILTER_VALIDATE_INT)整数か判定
FILTER_VALIDATE_INT整数か判定
FILTER_VALIDATE_FLOAT浮動小数点か判定

trim()

文字列の前後のスペースを削除

strlen()

文字列の長さを返します

htmlentities()

HTML文字をエンコードします。クロスサイトスクリプティング攻撃を防ぎます。

変換前変換後
&&amp;
<&lt;
>&gt;
&quot;

情報の保存:データベース

PDO

PHP Data Object

PHPからデータベースにアクセスするためのインターフェースです。

//データベースへの接続
$db = new PDO('データソース名', 'ユーザ名', 'パスワード');

//例:ローカルホスト
$user = 'root';
$password = 'root';
$host = 'localhost';
$dbName = 'sample_0713';
$dsn = "mysql:host={$host};port=8889;dbname={$dbName}";


$db = new PDO($dsn, $user, $password);

PDOException

DB接続(new PDO()でインスタンスを生成する)時に何らかの問題があると、PDOクラスはPDOException例外が発行されます。

<?php
try {
$db = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
exit('データベースに接続できませんでした。' . $e->getMessage());
}
?>

SQL

SELECT

SELECT 列名1, 列名2, … 
 FROM テーブル名 WHERE 条件;

INSERT

//すべての列の値を追加
INSERT INTO テーブル名 VALUES(値1, 値2, …);

UPDATE

//すべての列の値を追加
UPDATE SET テーブル名 SET 列名=値1, 値2, 値3, …
 WHERE 条件;

DELETE

DELETE FROM テーブル名 WHERE 条件;

query()

指定したSQL文をデータベースに対して実行してくれます。

prepare()

プリペアドステートメント

SQL文の値をパラメータ化したもの(プレースホルダ)で、テンプレートのようなものです。

execute()

$sql = "SELECT name, price FROM foods WHERE price >=? AND price <=?;

$q = $db->prepare($sql);

// パラメータ値の配列を渡す
$q->execute(array ($POST['min_price'], $POST['max_price']));

フェッチモード

定数取得の形式値の取得例
PDO::FETCH_ASSOC連想配列$row[‘name’]
PDO::FETCH_CLASS指定されたクラスにフェッチ$row->name

fetch

該当する結果を1行で返す

fetchAll

結果の内容をまとめて配列で返す

fetchColumn

該当するデータから単一のカラムを返す

https://www.javadrive.jp/php/pdo/index8.html

ファイルの操作

file_get_contents

file_put_contents


<?php
$file = "text.txt";
$string = "書き込む内容";
var_dump( file_put_contents($file, $string) );
?>


file_get_contents(ファイル名)ファイルの内容を読み込む
file_put_contents(ファイル名,文字列)文字列をファイルに書き込む

ローカルファイルだけでなくリモートファイル(他のコンピュータにあるファイル)にも書き込み可能です。

fopen()

fopen()関数はファイルにアクセスするときに使うファイルポインタを返します。

$ファイルポインタ = fopen(ファイル名, ファイルのモード);

モード操作ファイルポインタの位置・上書き
rb読み込み先頭
上書きしない
rb+読み込み、書き出し先頭
上書きしない
wb書き出し先頭
上書きする
wb+読み込み、書き出し先頭
上書きする
ab書き出し末尾
上書きしない
ab+読み込み、書き出し末尾
上書きしない
xb書き出し先頭
上書きしない
xb+読み込み、書き出し先頭
上書きしない
  1. ファイルへの接続をオープン
    fopen()関数
  2. 読み書き
    fgets()関数、fwrite()関数
  3. ファイルをクローズ
    fclose()関数

fgetcsv()

CSVファイルを読み込む

$配列 = fgetcsv(ファイルポインタ, 行の長さ);

header()

//header('Content-Type: ファイルの種類'); クライアントにファイルの種類を知らせる
header('Content-Type: sample/csv');

//sample.csvという名前でダウンロード
header('Content-Disposition: attachment; filename="sample.csv"');

is_readable()

ファイルが読み込み可能か判定

is_writable()

ファイルが書き込み可能か判定

file_exists()

ファイルやディレクトリが存在しているか判定

ユーザの記憶:クッキーとセッション

Cookie

クッキーを定義

setcookie(name, value, expire, path, domain, secure, httponly)

1.name … クッキーの名前
2.value … クッキーの値
3.expire … 有効期限
4.path … URLのパス
5.domain … 有効なドメイン
6.secure … secure属性(HTTPS通信時のみ許可)
7.httponly … httponly属性(JavaScriptによるクッキーの操作を防ぐ)

セッション

session_start()

session_start()関数によってセッションを作成、セッションIDをPHPSESSIDの値に設定しクライアントに返送します。

基本的にサーバ上に値を保持

session_destroy()

Webサーバが保持しているセッションのデータを削除します。

  • unset() … 配列から指定のキーの値を取り除きます。
  • reset() … 再初期化

cURL

cURLとはPHPの拡張機能(ライブラリ)です。

cURLを使うことで、外部サイトにアクセスし情報を取得するこどができます。

  1. curl セッションを初期化
  2. curl のオプションを設定
  3. curl を実行
  4. curl セッションを終了
  • curl_init() アクセスしたいURLを指定
  • curl_exec() ハンドルを利用して、PHPの動作をリクエストを取得
$url = "https://ntorelabo.com/";

//cURLセッションを初期化
$ch = curl_init();

//URLとオプションを指定
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // SSL化されているサイトも取得可能にする
curl_setopt($ch, CURLOPT_FAILONERROR, true); // HTTPステータスが400以上なら処理失敗と判断
  
//セッションを実行
$html = curl_exec($ch);

// ページに出力
if($html){
  echo $html;
}else{
  echo "サイトが見つかりませんでした";
}
  
//セッションを終了
curl_close($ch);

curl_setopt

オプション
CURLOPT_RETURNTRANSFERTRUEを設定すると、curl_exec()関数の返り値を文字列で返す
CURLOPT_HEADERTRUEを設定するとヘッダの内容も出力する
CURLOPT_POSTTRUEを設定するとPOSTのリクエストを宣言する
CURLOPT_POSTFIELDSHTTP POST で送信するデーターを設定する
CURLOPT_COOKIEJAR・TRUEを指定するとクッキーを追跡する
・ファイル名を指定すると指定のファイルにクッキーの情報が保存される
CURLOPT_COOKIEFILEクッキーのファイルを指定することでクッキーの情報を読み込む

curl_getinfo()

curlハンドルをもとにリクエスト情報を返す

$info = curl_getinfo($ch);
var_dump($info);

フレームワーク

Laravel

  • オープンソースのPHPフレームワーク、無償で利用可能
  • Bladeテンプレートエンジンをサポート

テンプレートエンジン

動的な処理プログラムと表示内容を記述したHTMLを別で管理する仕組みです。

テンプレート(HTMLのひな型)を必要に応じて書き換えて画面に出力するライブラリ

Symfony

  • オープンソースのPHPフレームワーク、無償で利用可能
  • YAML、XML、PHP、Annotationsによってルーティングを設定
  • Twigテンプレートをサポート

Zend Framework

  • オープンソースのPHPフレームワーク、無償で利用可能
  • デフォルトのテンプレートはPHP

phpコマンド

php -S Webサーバ名:ポート番号
オプション名
-S組み込みサーバを開始
-hコマンドのヘルプを表示
-mPHPに組み込まれたモジュールを表示
-aPHPを対話的に実行(PHP REPL)
※REPLとは 入力・評価・出力をできる対話型実行環境
-t組み込みWebサーバのドキュメントルートを設定
-d設定ファイル(php.ini)で設定ディレクティブにカスタム値を設定
-iphpinfo()関数を実行し、PHPの設定情報を出力

Swift Maile

// オブジェクト作成
$message = Swift_Message::newInstance;

// タイトル
$message->setSubject('タイトル');

// 送信元の設定(送信元メールアドレスと送信者名)
$message->setFrom(['name@example.com' => 'NAME']);

// 宛先(受信者のメールアドレスと受信者名)
$message->setTo['name@example.com' => 'NAME']);

// 本文
$message->setBody('本文');

// メール送信
$result = $mailer->send($message);

Composer

Composerは拡張ライブラリをインストールするためのツールです。

Composerアプリ単位で個別でパッケージをインストール
PEARすべてのアプリでパッケージを共通にしている

Packagist

Composerでインストール可能なパッケージ一覧リストです。

デバッグ、テスト

例外処理

前もって起こる可能性のあるエラーを想定しておき、その際の行う処理です。

例外処理はtry~catch~finally命令を利用します。

try~catchブロックの中で未補足の例外が発生した場合プログラムは停止します。

try {
// 例外が発生するかもしれないコード
} catch(発生するかもしれない例外の種類 例外を受け取る変数名) {
// 例外発生時の処理
} finally {
// 例外の有無にかかわらず実行する処理
}

Exception

Exceptionクラスではプログラム実行中のエラー(例外)を扱います。

<?php
 
try {
    //throw new 例外クラス名(引数)でインスタンスを作成
    throw new Exception('例外処理発生');
} catch(Exception $e) {
    //getMessageで例外メッセージを取得
    echo $e->getMessage();
}
 
?>

set_exception_handler

ユーザ定義の例外ハンドルを設定するときにset_exception_handler()関数を使います。

<?php
function test_exception_handler($exception) {
 …
}

set_exception_handler("test_exception_handler");
throw new Exception("例外ハンドル!!");
?>

PHPUnit

PHPUnitはPHPのコードのテストを記述するためのデファクトスタンダードです。

  1. アサーション
  2. アノテーション

assertEquals()

アサーションメソッドの一つです。1つ目と2つ目の引数が一致しない場合にエラーを報告します。

parse_ini_file()

parse_ini_file()をつかうと構成ファイル(PHP設定ファイルのphp.iniファイルと同じ形式)内容を一度に読み込むことができます。

display_errors

PHPでエラーを表示するとき、PHPのファイル(php.ini)で

display_errors = On

log_errors

PHPでエラーログをサーバに送信するとき、PHPのファイル(php.ini)で

log_errors = On

error_reporting

error_reportingはphp.iniの設定値です。

設定するレベルによって出力する内容がかわります。

Parse Errorプログラムに構成上の問題があるE_PARSE
Fatal Error
(致命的なエラー)
プログラムの内容に関わる重大の問題がある
発生した場合は処理を停止
E_ERROR
Warningプログラムに疑わしい箇所があるE_WARNING
Notice
(注意)
マナー違反のまま動作しているE_NOTICE
Strict Notice
(厳格注意)
コーディングスタイルについての注意E_STRICT

Git

バージョン管理システム

タイムゾーン

タイムゾーンを指定しない場合デフォルトでUTC(Universal Time Coordinated:協定世界時間)が設定されます。

<タイムゾーン設定法>

  • php.iniファイルのdate.timezoneの項目で設定する
  • スクリプト内でdate_default_timezone_set関数で設定する

phpインストール Mac

https://www.stub-create.com/blog/php/mamp-brew.html
Ctrl+Alt+Deleteの使い方完全ガイド

基本的な使い方

  1. キーボードの「Ctrl」キー、「Alt」キー、「Delete」キーを同時に押します
  2. 画面が切り替わり、以下のメニューが表示されます:
  • タスクマネージャー
  • ログオフ
  • パスワードの変更
  • タスクの切り替え
  • シャットダウン

主な活用シーン

1. プログラムがフリーズした時

  • タスクマネージャーを開いて問題のプログラムを強制終了できます
  • 「応答なし」となっているプログラムを選択して「タスクの終了」をクリック

2. セキュリティ対策として

  • 席を離れる時にログイン画面に戻せます
  • 不正アクセスが疑われる時に安全にロックできます

3. システム管理

  • 実行中のプログラムやプロセスの確認
  • メモリやCPU使用率の監視
  • パフォーマンスの確認

注意点

  • 作業中のデータは事前に保存しておきましょう
  • フリーズ時に連打するのは避けましょう
  • 通常の操作では必要ありません
【Next.js TypeScript 】React Swiper カルーセルスライダー実装、スライドが中央寄せにする方法

完成イメージ

手順

Next.js プロジェクトを用意します

npx create-next-app@latest my-carousel-app

プロジェクトに必要な依存関係をインストール

Swiperと必要なアイコンライブラリをインストールします

# Swiperのインストール
npm install swiper

# Font Awesome(ナビゲーション用アイコン)のインストール
npm install @fortawesome/react-fontawesome @fortawesome/fontawesome-svg-core @fortawesome/free-solid-svg-icons

# 型定義のインストール(TypeScriptを使用する場合)
npm install --save-dev @types/react-fontawesome

コンポーネントの実装

my-nextjs-app/
├── src/
│   ├── app/
│   │   └── page.tsx          # メインページ
│   ├── components/
│   │   └── ReactSwiper.tsx   # カルーセルコンポーネント
│   └── styles/
│       └── reactSwiper.module.css  # コンポーネント用スタイル
├── package.json
└── ...その他の設定ファイル
ReactSwiper.tsx # カルーセルコンポーネント
"use client";
import React from "react";
import { Swiper, SwiperSlide } from "swiper/react";
import { Navigation, Pagination, Autoplay, Mousewheel } from "swiper/modules";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import {
  faChevronLeft,
  faChevronRight,
} from "@fortawesome/free-solid-svg-icons";
import "swiper/css";
import "swiper/css/pagination";
import "swiper/css/navigation";
import styles from "@/styles/reactSwiper.module.css";

interface CarouselProps {
  images?: string[];
}

const ReactSwiper: React.FC<CarouselProps> = ({ images }) => { 
  // 画像がない場合のデフォルト画像
  const defaultImages = [
    "https://bizlabo.site/assets/sample-img/column1.jpg",
    "https://bizlabo.site/assets/sample-img/column2.jpg",
    "https://bizlabo.site/assets/sample-img/column3.jpg",
    "https://bizlabo.site/assets/sample-img/column4.jpg",
    "https://bizlabo.site/assets/sample-img/column5.jpg",
    "https://bizlabo.site/assets/sample-img/column6.jpg",
    "https://bizlabo.site/assets/sample-img/column7.jpg",
    "https://bizlabo.site/assets/sample-img/column8.jpg",
  ];

  const imagesToUse = images || defaultImages;

  return (
    <div className={styles.container}>
      <Swiper
        modules={[
          Navigation, // ナビゲーション(次へ/前へボタン)を有効にするモジュール
          Pagination, // ページネーション(スライドのインジケーター)を有効にするモジュール
          Autoplay,   // 自動再生を有効にするモジュール
          Mousewheel  // マウスホイールでスライドをスクロールできるようにするモジュール
        ]}        spaceBetween={10} // スライド間のスペースを30pxに設定
        navigation={{
          nextEl: `.${styles.swiperButtonNext}`, // 次へボタン
          prevEl: `.${styles.swiperButtonPrev}`, // 前へボタン
        }}
        pagination={{
          clickable: true, // ページネーションをクリック可能に
          bulletClass: styles.bullet,
          bulletActiveClass: styles.bulletActive,
        }}
        // autoplay={{ delay: 3000 }}
        loop
        centeredSlides // スライドを中央に表示
        slidesPerView={1}
        breakpoints={{
          0: {
            slidesPerView: 1.4,
          },
          768: {
            slidesPerView: 2.2,
          },
          1024: {
            slidesPerView: 4,
          },
        }}
        speed={800}
        className={styles.reactSwiper} // Swiperコンポーネントにクラス名を追加
      >
        {imagesToUse.map((image, index) => (
          <SwiperSlide key={index} className={styles.slide}>
            <img
              src={image}
              alt={`Slide ${index}`}
              className={styles.slideImage}
            />
          </SwiperSlide>
        ))}
        <div className={styles.swiperButtonPrev}>
          <FontAwesomeIcon icon={faChevronLeft} />
        </div>
        <div className={styles.swiperButtonNext}>
          <FontAwesomeIcon icon={faChevronRight} />
        </div>
      </Swiper>
    </div>
  );
};

export default ReactSwiper;
reactSwiper.module.css # コンポーネント用スタイル
.container {
  position: relative;
  padding: 2rem 0;
  overflow: hidden;
}

.slide {
  display: flex;
  justify-content: center;
  align-items: center;
  width: 90%;
}

.slideImage {
  width: 100%;
  height: auto;
  cursor: pointer;
}

.swiperButtonPrev,
.swiperButtonNext {
  position: absolute;
  top: calc(50% - 20px);
  transform: translateY(-50%);
  z-index: 2;
  cursor: pointer;
  color: #000;
  font-size: 4vw;
  transition: color 0.3s ease;
  background-color: rgba(255, 255, 255, 0.8);
  border-radius: 50%;
  width: 6vw;
  height: 6vw;
  display: flex;
  justify-content: center;
  align-items: center;
  transition: all 0.3s ease;
}

.swiperButtonPrev:hover,
.swiperButtonNext:hover {
  color: #666;
  background-color: rgba(255, 255, 255, 0.6);
  width: 7vw;
  height: 7vw;
}

.swiperButtonPrev {
  left: 10px;
}

.swiperButtonNext {
  right: 10px;
}

.bullet {
  width: 12px;
  height: 12px;
  display: inline-block;
  border-radius: 50%;
  background: #ccc;
  margin: 0 4px;
  cursor: pointer;
  transition: all 0.3s ease;
}

.bullet:hover {
  background: #666;
  width: 14px;
  height: 14px;
}

.bulletActive {
  background: #000;
}

.reactSwiper {
  padding-bottom: 40px;
}

/* .reactSwiper :global(.swiper-slide) {
  opacity: 1;
} */

/* .reactSwiper :global(.swiper-slide:not(.swiper-slide-active)) {
  opacity: 0.2;
} */

.reactSwiper :global(.swiper-pagination) {
  bottom: 0;
}

スライドの中に画像だけでなくテキストも入れる場合

reactSwiperVoice.tsx # コンポーネント
'use client'
import React, { ReactNode } from 'react'
import { Swiper, SwiperSlide } from 'swiper/react'
import { Navigation, Pagination, Autoplay } from 'swiper/modules'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import {
    faChevronLeft,
    faChevronRight,
} from '@fortawesome/free-solid-svg-icons'
import 'swiper/css'
import 'swiper/css/pagination'
import 'swiper/css/navigation'
import styles from '@/styles/reactSwiperVoice.module.css'

interface SlideItem {
    id: number
    customerSrc: string
    customerAlt: string
    text: ReactNode
}

const ReactSwiperVoice: React.FC = () => {
    const slideItems: SlideItem[] = [
        {
            id: 1,
            customerSrc: 'https://bizlabo.site/assets/staff-img/staff-1.png',
            customerAlt: 'Customer01',
            text: (
                <>
                    テキスト
                    <span className={styles.marker}>テキストテキストテキストテキスト</span>
                    テキストテキストテキストテキストテキストテキストテキストテキスト
                    <br />
                    テキストテキストテキストテキストテキストテキストテキストテキスト
                    <br />
                    <span className={styles.marker}>テキストテキストテキストテキスト</span>
                    <br />
                    テキストテキストテキストテキストテキストテキストテキストテキスト
                </>
            ),
        },
        {
            id: 2,
            customerSrc: 'https://bizlabo.site/assets/staff-img/staff-2.png',
            customerAlt: 'Customer02',
            text: (
                <>
                    テキスト
                    <span className={styles.marker}>テキストテキストテキストテキスト</span>
                    テキストテキストテキストテキストテキストテキストテキストテキスト
                    <br />
                    テキストテキストテキストテキストテキストテキストテキストテキスト
                    <br />
                    <span className={styles.marker}>テキストテキストテキストテキスト</span>
                    <br />
                    テキストテキストテキストテキストテキストテキストテキストテキスト
                </>
            ),
        },
        {
            id: 3,
            customerSrc: 'https://bizlabo.site/assets/staff-img/staff-3.png',
            customerAlt: 'Customer03',
            text: (
                <>
                    テキスト
                    <span className={styles.marker}>テキストテキストテキストテキスト</span>
                    テキストテキストテキストテキストテキストテキストテキストテキスト
                    <br />
                    テキストテキストテキストテキストテキストテキストテキストテキスト
                    <br />
                    <span className={styles.marker}>テキストテキストテキストテキスト</span>
                    <br />
                    テキストテキストテキストテキストテキストテキストテキストテキスト
                </>
            ),
        },
        {
            id: 4,
            customerSrc: 'https://bizlabo.site/assets/staff-img/staff-4.png',
            customerAlt: 'Customer04',
            text: (
                <>
                    テキスト
                    <span className={styles.marker}>テキストテキストテキストテキスト</span>
                    テキストテキストテキストテキストテキストテキストテキストテキスト
                    <br />
                    テキストテキストテキストテキストテキストテキストテキストテキスト
                    <br />
                    <span className={styles.marker}>テキストテキストテキストテキスト</span>
                    <br />
                    テキストテキストテキストテキストテキストテキストテキストテキスト
                </>
            ),
        },
        {
            id: 5,
            customerSrc: 'https://bizlabo.site/assets/staff-img/staff-5.png',
            customerAlt: 'Customer05',
            text: (
                <>
                    テキスト
                    <span className={styles.marker}>テキストテキストテキストテキスト</span>
                    テキストテキストテキストテキストテキストテキストテキストテキスト
                    <br />
                    <span className={styles.marker}>テキストテキストテキストテキスト</span>
                    <br />
                </>
            ),
        },
        {
            id: 6,
            customerSrc: 'https://bizlabo.site/assets/staff-img/staff-6.png',
            customerAlt: 'Customer06',
            text: (
                <>
                    テキスト
                    <span className={styles.marker}>テキストテキストテキストテキスト</span>
                    テキストテキストテキストテキストテキストテキストテキストテキスト
                    <br />
                    テキストテキストテキストテキストテキストテキストテキストテキスト
                    <br />
                    <span className={styles.marker}>テキストテキストテキストテキスト
                        
                    テキストテキストテキストテキストテキストテキストテキストテキスト
                    </span>
                    <br />
                    テキストテキストテキストテキストテキストテキストテキストテキスト
                </>
            ),
        },
        {
            id: 7,
            customerSrc: 'https://bizlabo.site/assets/staff-img/staff-7.png',
            customerAlt: 'Customer07',
            text: (
                <>
                    テキスト
                    <span className={styles.marker}>テキストテキストテキストテキスト</span>
                    テキストテキストテキストテキストテキストテキストテキストテキスト
                    <br />
                    テキストテキストテキストテキストテキストテキストテキストテキスト
                    
                    テキストテキストテキストテキストテキストテキストテキストテキスト
                    <br />
                    <span className={styles.marker}>テキストテキストテキストテキスト</span>
                    <br />
                    テキストテキストテキストテキストテキストテキストテキストテキスト
                </>
            ),
        },
        {
            id: 8,
            customerSrc: 'https://bizlabo.site/assets/staff-img/staff-8.png',
            customerAlt: 'Customer08',
            text: (
                <>
                    テキスト
                    <span className={styles.marker}>テキストテキストテキストテキスト</span>
                    テキストテキストテキストテキストテキストテキストテキストテキスト
                    <br />
                    <br />
                    <span className={styles.marker}>テキストテキストテキストテキスト</span>
                    <br />
                    テキストテキストテキストテキストテキストテキストテキストテキスト
                </>
            ),
        },
    ]

    return (
        <div className={styles.container}>
            <h2 className={styles.title}>お客様の声</h2>
            <Swiper
                modules={[Navigation, Pagination, Autoplay]}
                spaceBetween={1} // スライド間のスペース
                navigation={{
                    nextEl: `.${styles.swiperButtonNext}`, // 次へボタン
                    prevEl: `.${styles.swiperButtonPrev}`, // 前へボタン
                }}
                pagination={{
                    clickable: true, // ページネーションをクリック可能に
                    bulletClass: styles.bullet,
                    bulletActiveClass: styles.bulletActive,
                }}
                autoplay={{ delay: 2000 }} // 自動再生
                loop
                centeredSlides // スライドを中央に表示
                // 1画面に表示するスライド数
                breakpoints={{
                    0: {
                        slidesPerView: 1.2,
                    },
                    768: {
                        slidesPerView: 2.4,
                    },
                    1024: {
                        slidesPerView: 4,
                    },
                }}
                speed={800} // スライドアニメーションのスピード
                className={styles.reactSwiper} // Swiperコンポーネントにクラス名を追加

                slideActiveClass={styles.slideActive} // アクティブなスライドにクラス名を追加
                slidePrevClass={styles.slidePrev} // 前のスライドにクラス名を追加
                slideNextClass={styles.slideNext} // 次のスライドにクラス名を追加
            >
                {slideItems.map((slideitem, index) => (
                    <SwiperSlide key={index} className={styles.slide}>
                        <div className={styles.slideHeader}>
                            <img
                                src={slideitem.customerSrc}
                                alt={slideitem.customerAlt}
                                className={styles.slideCustomer}
                            />
                        </div>
                        <p className={styles.slideText}>{slideitem.text}</p>
                    </SwiperSlide>
                ))}
                <div className={styles.swiperButtonPrev}>
                    <FontAwesomeIcon icon={faChevronLeft} />
                </div>
                <div className={styles.swiperButtonNext}>
                    <FontAwesomeIcon icon={faChevronRight} />
                </div>
            </Swiper>
        </div>
    )
}

export default ReactSwiperVoice
reactSwiperVoice.module.css # コンポーネント用スタイル
.container {
    position: relative;
    padding: 2rem 0;
    overflow: hidden;
}

.title {
    font-size: 1.5rem;
    font-weight: bold;
    margin-bottom: 2rem;
    text-align: center;
}

.swiper-wrapper {
    align-items: stretch;
}

.slide {
    border: solid 6px #555;
    border-radius: 0.5rem;
    display: flex;
    flex-direction: column;
    height: auto; /* 高さをそろえるため */
    box-sizing: border-box;
    transition: all 0.3s ease;
    transform: scale(0.9)!important;
}

.slideActive {
    transform: scale(1)!important;
}



.slideHeader {
    background-color: #ececec;
    text-align: center;
}

.slideCustomer {
    width: 40%;
    height: auto;
    object-fit: contain;
    vertical-align: bottom;
}

.slideText {
    padding: 1rem;
    font-size: clamp(0.75rem, 1.2vw, 1.5rem);
}

.marker {
    background-size: 0 0;
    background-position: left bottom;
    background-repeat: no-repeat;
    background-image: linear-gradient(to right, #ffb180, #ffb180);
    transition: background-size 0.8s ease;
}

.slidePrev .marker,
.slideNext .marker {
    background-size: 0 0;
}

.slideActive .marker {
    background-size: 100% 0.5rem;
}

.swiperButtonPrev,
.swiperButtonNext {
    position: absolute;
    top: calc(50% - 20px);
    transform: translateY(-50%);
    z-index: 2;
    cursor: pointer;
    color: #fff;
    font-size: 4vw;
    transition: color 0.3s ease;
    background-color: rgba(0, 0, 0, 0.8);
    border-radius: 50%;
    width: 6vw;
    height: 6vw;
    display: flex;
    justify-content: center;
    align-items: center;
    transition: all 0.3s ease;
}

.swiperButtonPrev:hover,
.swiperButtonNext:hover {
    background-color: rgba(0, 0, 0, 0.6);
}

.swiperButtonPrev {
    left: 10px;
}

.swiperButtonNext {
    right: 10px;
}

.bullet {
    width: 12px;
    height: 12px;
    display: inline-block;
    border-radius: 50%;
    background: #ccc;
    margin: 0 4px;
    cursor: pointer;
    transition: all 0.3s ease;
}

.bullet:hover {
    background: #666;
    width: 14px;
    height: 14px;
}

.bulletActive {
    background: #000;
}

.reactSwiper {
    padding-bottom: 40px;
}

.reactSwiper :global(.swiper-pagination) {
    bottom: 0;
}

アクティブなスライドを中央寄せにならないときの解決方法

(問題)アクティブなスライドを中央に表示させるにはcenteredSlides: trueでなるはずですが、ずれてしまう

box-sizing: border-box;に指定

スライドに聞いているプロパティが何かしら影響していることがあるので要注意です

.slide {
    border: solid 6px #555;
    border-radius: 0.5rem;
    display: flex;
    flex-direction: column;
    height: auto; /
    box-sizing: border-box;* 中央寄せに */
    transition: all 0.3s ease;
    transform: scale(0.9)!important;
}

参考サイト

https://b-risk.jp/blog/2022/04/swiper/
WordPress自作、カスタマイズ

便利なプラグイン

WP Multibyte Patch

https://ja.wordpress.org/plugins/wp-multibyte-patch

Show Current Template

https://ja.wordpress.org/plugins/show-current-template

テンプレートタグ

テンプレートタグとはWordPressで用意されたカスタマイズするためのPHPの関数です

home_url()

現在のブログのホームURLを返します。

無害化(サニタイズ)を行う必要があります。

echo esc_url( home_url() );

the_content();

現在の投稿ページの本文を出力します。このテンプレートタグはWordPressループの中で使わなければなりません。

single.phpなど個別の投稿記事ページで管理画面で入力した本文を表示させるために使います。使い方は、テンプレートファイル(single.phpなど)の表示させたい箇所でWordPressループさせて表示させます。

get_template_part($slug, $name, $args)

header.php、footer.php、sidebar.phpなどを除いたテンプレートファイルを読み込みます。

wp_head();

wp_headアクションをスタートさせます。(アクションフックを登録する関数) テーマテンプレートファイル内の</head>タグの直前で使います。

このテンプレートタグがなければhead内に必要な情報が出力されません。スタイルシートJavaScriptが読み込まれなかったりします。

wp_footer();

wp_footerアクションフックをスタートさせます。 テーマテンプレートファイル内の</body>タグの直前で使う。</body>タグの直前に記述します。 このテンプレートタグがなければ、ログイン中にサイト上部に管理バーが表示ず、またスクリプトがエラーになったりします。

bloginfo( );

bloginfo( 'name' ); // サイトタイトル出力
bloginfo( 'description' ); // キャッチフレーズ出力

wp_nav_menu();

管理画面で設定したナビゲーションメニューを表示します。 このテンプレートタグで出力されるメニューは「管理画面→外観→メニュー」で作成できます。

<?php
  wp_nav_menu(
    array(
      'theme_location'  => 'top',
      'menu_id'         => 'top-menu',
      'container'       => 'nav',
      'container_class' => 'header-navigation-container',
    )
  );
?>
キー説明
theme_locationメニューを構成するul 要素に適用するID
menu_idregister_nav_menu()やregister_nav_menus()で設定したテーマの中で使われる位置
containerメニューを囲むコンテナのタグを変更
container_classメニューを囲むコンテナのクラスを変更
https://retval.jp/blog/wp-function-navigation

オリジナルテーマ作成手順

https://ntorelabo.com/?p=3224
https://siennahare23.sakura.ne.jp/wp-lesson/%e3%82%aa%e3%83%aa%e3%82%b8%e3%83%8a%e3%83%ab%e3%83%86%e3%83%bc%e3%83%9e%e3%81%ae%e4%bd%9c%e6%88%90

テーマユニットテスト

様々なテスト用データをインストールできる

フック

「特定のタイミング」で「外部からの処理を追加できる」ようにするもの

  • 特定のタイミング → WordPress本体やテーマ、プラグインが用意してくれている。
  • 外部からの処理
    1. 関数を実行 … アクションフック
    2. 変数を上書き … フィルターフック

アクションフック

処理を追加するときに使います。WordPressの処理のタイミングで作成した処理を割り込ませることができます。

do_actionでフックを設置し、add_actionでそのフックに処理を追加する

add_action

<?php add_action( $hook, $function_to_add, $priority, $accepted_args ); ?>

add_action( 'フックさせたい場所の名前', '呼び出してほしい関数名', 優先順位(省略可能),引数の数(省略可能) );

フィルターフック

データベースに追加する前やブラウザに表示する前などに、様々な形のテキストをカスタマイズするためのフックです。

apply_filtersでフックを設置し、add_filterでそのフックに処理を追加する

https://ntorelabo.com/?p=7978

既存のテーマの子テーマによるカスタマイズ

1からテーマを作成するより、子テーマによるカスタマイズのほうがよい理由がいくつかあります。

  • WordPressの多くの機能を把握しておく必要がない(関数など)
  • 毎回のアップデート影響をうけず、親テーマにまかせることができる

上記の観点から、親テーマの選定は長期で使われていて、アップデートを頻繁にしているものがよいといえます。

親テーマより小テーマのテンプレートファイルが優先して読み込まれる

小テーマがある場合WordPressは小テーマでファイルを探し、なければ親テーマのファイルを読み込みます。※functions.phpは上書きではなく子→親両ファイル読み込みます

例えばヘッダー部分をカスタマイズしたい場合親テーマのheader.phpを小テーマのディレクトリに複製して内容を書き換えます。

https://siennahare23.sakura.ne.jp/wp-lesson/%e5%ad%90%e3%83%86%e3%83%bc%e3%83%9e%e3%81%ae%e4%bd%9c%e6%88%90

Lightningの子テーマカスタマイズ

▼フォルダ構成

  • lightning-child
    • style.css
    • functions.php
    • assets
      • css
        • style.css
    • _g3
      • template-parts
        • site-header.php

style.css

/*
Theme Name: lightning Child
Template: lightning
*/

functions.php

<?php
add_action('wp_head', function() {
    ?>
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Josefin+Sans:ital,wght@0,100..700;1,100..700&family=Noto+Sans+JP:wght@100..900&display=swap" rel="stylesheet">
    <?php    
});
add_action(
    'wp_enqueue_scripts', function() {
        wp_enqueue_style('parent-style', get_template_directory_uri() .'/style.css');
        wp_enqueue_style('child-style', get_stylesheet_directory_uri() .'/assets/css/style.css', array('parent-style'), date("ymdHis", filemtime( get_stylesheet_directory() .'/style.css')));
    }
);

Lightning ヘッダーカスタマイズ

実現したいこと画面上部追従、ロゴは中央

_g2/header.phpを作成し編集

参考サイト:https://qiita.com/healing_code/items/1be7ca44b4a5b63436b7

今回のケースでは上記テンプレートファイルではなく、_g3/template-parts/site-header.phpでした

Lightning ヘッダー設定

  • ヘッダーレイアウト →中央揃え
  • グローバルナビスクロール時のレイアウト →固定しない

Lightning ハンバーガーメニューカスタマイズ

Lightningのハンバーガーメニューは画像

参考サイト:https://wordpress.org/support/topic/%E5%AD%90%E3%83%86%E3%83%BC%E3%83%9E%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B_g3%E3%80%81inc%E5%86%85%E3%81%AEvk-mobile-nav%E6%94%B9%E5%A4%89%E5%8F%8D%E6%98%A0%E3%81%AE%E4%BB%B6/

特定のページのみCSS/JSファイルを読み込ませる方法

add_action( 'wp_enqueue_scripts', function(){
// トップページにだけCSSファイルを追加
if( is_front_page() ){
wp_enqueue_style(
'front',
get_template_directory_uri() . '/assets/css/front.min.css',
array(),
''
);
}
// 投稿IDが30のページにのみJSファイルを追加
if(is_page(30)){
wp_enqueue_script(
'page30js',
get_template_directory_uri() . '/assets/js/page30.js',
array(),
array(),
true
);
}
}
https://flex-box.net/wordpress-css-ispage

特定の固定ページだけ処理をする方法

function getPostList(){
// 検索条件の登録
$arg = [
'posts_per_page' => 20,
'order' => 'ASC',
'post_status' => 'publish'
];
$queryObject = new WP_Query($arg);
// 取得した投稿一覧はpostsに格納されている
return $queryObject->posts;
}
// 取得した記事一覧をループさせ、HTML化
foreach(getPostList() as $post){
~...
// 投稿名
$post->post_title;
// 本文
$post->post_content;
https://b-risk.jp/blog/2022/12/wp-functions

トラブル

エラーの種類

Error
エラー
構文がおかしかったり、関数名が重複している場合になるエラー
エラーになった時点でプログラムは停止する
Warning
警告
引数が足りない場合等になるエラー
プログラムは動作しているが、正常に動作していない可能性が高い
Notice
注意
未定義の関数の使用など、軽微な問題
プログラムは動作しているが、正常に動作していない可能性が高い

デバッグモード

WordPressはデフォルトでエラーメッセージを出力しない設定となっていますが、デバッグモードを有効にすることで表示することができます。

define( 'WP_DEBUG', false ); define( 'WP_DEBUG', true ); 

よくある内容

(構文がおかしいときに発生)
Parse error: syntax error, unexpected ○○ in ファイル名 on line 行数
(関数が未定義のときに発生)
Fatal error: Call to undefined function 関数名() in ファイル名 on line 行数
(同じ関数名で関数を定義したときに発生)
Fatal error: Cannot redeclare 関数名() (previously declared in ファイル名 on line 行数A) in ファイル名 on line 行数B
(変数が未定義のときに発生)
Notice: Undefined variable: 変数名 ~ in ファイル名 on line 行数

https://site-manage.net/archives/3346
FTPソフトでホームページを公開

FTP(File Transfer Protocol) … ファイル転送プロトコル

サーバにホームページのファイルをアップロードしたり、バックアップとしてダウンロードすることが可能

主なFTPソフト

  • FileZilla

FTPアカウント情報

  • FTPホスト名(FTPサーバー名)
  • FTPユーザー名(FTPアカウント名)
  • FTPパスワード

public_html

public_htmlはレンタルサーバにホームページのHTMLファイル(html、css、画像等のファイル)をアップロードするフォルダです。

xserverのサーバーパネルにてドメイン、サブドメインを作成しそちらのpublic_htmlフォルダにアップロードする

index.html

トップページはindex.htmlが表示されます。

FTPではなくGitの利用

現在FTPはレガシーな手段という印象で、ヒューマンエラーが発生しやすい問題があります。

Gitでファイルの転送をすることが多いです。小規模で管理するサイトでは問題ないですが、大規模で大人数で管理する場合は特に推奨されます。

生産管理システム

生産管理システムの成果

  • 業務効率の向上
    • 時間短縮(在庫確認、発注、変更登録、製造履歴検索)
  • 管理精度向上
    • 発注量
    • 在庫管理
    • 生産管理
  • クラウド管理 → いつでもどこでも管理可能

生産管理の定義

  • 生産計画の作成
    1. 出荷指示書
    2. ピッキング
    3. 荷造り
    4. 配送先仕分け
    5. 出荷書類
    6. 積込み
    7. 出荷記録
  • 購買管理
  • 受注管理
  • 工程進捗管理
  • 在庫管理
  • 原価管理
  • 生産性管理

CAD

  • Computer Aided Design
  • 設計作業において効率よくするためのコンピュータ利用した支援

CAE

  • Computer Aided Engineering
  • 製造業等で活用されるシミュレーション解析

E-BOM

製品データベース

M-BOM

E-BOMに様々な情報を付加

ERP

  • Enterprise Resource Planning(企業資源計画)
  • 「会計」「人事」「生産」「物流」「販売」を統合的に管理

生産形態

業務の把握

受注

  • 最新の受注内容
  • 受注変更の調整
  • EDIシステムへの対応

購買

  • 発注先の進捗 → 生産調整

生産

  • リアルタイムの生産進捗

販売

  • 販売状況
  • 製品在庫
  • 需要予測

顧客の要求

  • 7つのサブシステム「生産計画」「工程管理」「在庫管理」「原価・生産性管理」「販売管理」「購買管理」「マスタ管理」
  • 販売管理 … 需要情報
  • 生産計画は時間経過とともに具体的に

生産間の周辺システム

関係の深いシステム

  1. 販売管理システム
  2. EC•EDI受発注システム
  3. POPシステム
  4. 在庫管理システム
  5. 会計システム

関係の薄いシステム

  1. 設計開発管理CAD/CAM/ CAE
  2. 製品管理PDM /PLM
  3. 自動倉庫システム
  4. 給与・労務システム

MRP

Material Requirement Planning資材所要量計画

  • 製品を作るのに必要な材料、部品の所要量の計算法
  • BOMが必須

BOM

BOMはP/N(Parts Number:品名マスタ)とP/S(Parts Structure:部品構成マスタ)から構成されます。

品名マスタ

製品部品の基礎情報として、製造業の全ての業務で扱う全情報の個々の情報を集めたものです。

属性データ、調達データ、管理データの3つに分けられます。

属性データ

  • 製品・部品名称
  • 設計番号
  • 材質
  • 品質レベル
  • 変換比率

調達データ

  • 内・外製区分
  • 購入先
  • 価格
  • 調達リードタイム

管理データ

  • 担当工場
  • ストップコード
  • 状態コード

名称コード

意味づけコード意味なしコード
認知性コードを見れば概要がわかるコード表の参照が必要
永続性時間経過でリスクありあり
採番性・管理者が必要
・分散で採番可
・集中管理必要
・自動的に採番可能
システム化コードに翻訳が必要対応性高
利便性習熟が必要未経験者に便利
【基本情報】表計算

相対

相対(セル, x, y)セルの行番号にx、列番号にy移動

例)相対(B3,3,2)

整数部

引数を超えない一番大きな整数を返す

整数部(-2.9)→-3

余剰

割り算の余を求める

剰余(8,3)→2
剰余(40,7)→5

切上げ

切上げ(算術式,桁位置)
切上げ(429,0) → 429
切上げ(429.001,0) → 430

切捨て

切捨て(算術式,桁位置)
切捨て(429.857,0) → 429
切捨て(429.857,-2) → 400
切捨て(算術式,桁位置)
切捨て(429.857,0) → 429
切捨て(429.857,-2) → 400

IF

IF (論理式,式1,式2)
・論理式がtrue → 式1
・論理式がfales → 式2 

論理積

論理積(論理式1,論理式2,論理式3,…)
・論理式1,論理式2,論理式3,…が全てtrueのとき → true
・それ以外 → fales

論理和

論理積(論理式1,論理式2,論理式3,…)
・論理式1,論理式2,論理式3,…がいずれかtrueのとき → true
・それ以外 → fales

垂直照合

垂直照合( 式 , セル範囲 , 返却値の列の位置 , 検索の指定 )

・検索の指定は1か0が指定可能で、1 → 式の数値以下で最大値を検索する

水平照合

水平照合( 式 , セル範囲 , 返却値の行の位置 , 検索の指定 )

・検索の指定は1か0が指定可能で、1 → 式の数値以下で最大値を検索する

照合検索

照合検索 (式, 検索のセル範囲, 抽出のセル範囲)

検索のセル範囲(※1行または1列で指定する必要がある。)の○番目で一致
 → 抽出のセル範囲の○番目の値を返す

表引き

行と列を指定して値を返す

表引き (表の範囲, 行の位置, 列の位置)

照合一致

検索結果の位置を返す

照合一致 (式, セルの範囲, 検索の指定)
  1. 検索語を指定
  2. 範囲を指定※1行または1列で指定する必要がある。
  3. 完全一致かどうかを指定
  4. 結果
    • 検索の指定が0 … セル範囲での位置を返します。(左側か上側が基準、行列番号ではない)
    • 検索の指定が1 … 値以下の最大値を検索する。
    • 検索の指定が-1 … 値以上の最小値を検索する。

条件付個数

検索条件と一致する個数を求める

条件付個数(セル範囲,検索条件)

検索条件 … 数えるセルの条件(例)≦C9、≦20、='文字列'

条件付合計

条件付合計(セル範囲,検索条件,合計セルの範囲)

【基本情報】アルゴリズム

擬似言語

分岐

選択処理

条件式が真 → 処理を実行する

繰り返し

処理を実行する前、条件式が真の限り処理を繰り返す

処理を実行後、条件式が真の限り処理を繰り返す

条件式が真の間、繰り返し処理
開始時に初期値を格納し、繰り返すたび増分を加える

解答手順

以下の点を書き出して整理して考えてみる

  • プログラム目的は?
  • 配列定義添字
  • 変数定義添字
  • 変数具体的な数値を代入してイメージしてみる

符号つき2進数

最上位ビットで正負を示した2進数

シフト演算

論理シフト

  • 符号を考慮しない
  • 溢れたビットは捨てる
  • 開いたビットは0を入れる
  • 論理左シフト … 2n
  • 論理右シフト … −2n

算術シフト

  • 符号を考慮する … 1番左の数が1 → 負の数
  • 先頭の符合を表すビットは固定で残りビットに対して処理が行われる

2の補数

<2の補数の計算方法>

【基本情報】データベース

データベース設計

トランザクション

複数の処理を一つの処理とみなし、全て成功か、全て失敗のどちらかになる。

ACID特性

原子性
ATOMICITY
完全に実行されるか、全く実行されないかどちらか
一貫性
CONSISTENCY
トランザクションの実行前後で整合性をもち、一貫したデータである
独立性
ISOLATION
他のトランザクションへ影響しない
耐久性
DURABILITY
データが失われることは無い

ロック

共有ロック

  • データを参照する時
  • 共有ロック中は他のトランザクションからもデータを参照できる
  • 共有ロック中は更新はできません。

占有ロック

  • データを更新する時
  • 占有ロック中は他のトランザクションからもデータを参照できない
  • 占有ロック中は更新はできません。

デッドロック

2つのトランザクションが、お互いが共有資源解放待ち状態となり、どちらも処理も進行できなくなる状態

コミット

トランザクション処理を確定させる。

アボート

中止、強制終了

ロールバック

トランザクション処理失敗 → トランザクション前に戻す

ロールフォワード

データベースの内容を障害前の変更時の状態に戻す

選択

必要な行だけを抜き出す

射影

データの中から、必要な列だけを抜き出す

結合

同じ列を基準に2つの表をくっつける

正規化

  • 整合性の向上

第1正規化

  • 繰り返し要素をなくす
  • 行の結合を解除

第2正規化

主キーの一部の関数従属性を排除。
関数従属性…ある列に別の列が連動する、例)従業員番号→氏名

  • 主キー … 行を特定できる列
  • 複合キー … 行をを特定できる複数の列

第3正規化

主キー以外の列の関数従属性を排除

https://it-biz.online/it-skills/normalization/

外部キー

  • 参照整合性制約
  • 参照先の表の列の値しかとれない

非NULL制約

NULLが入れられない

SQL

AS

SELECTで抽出したものに別名をつける。

SELECT
customer AS '顧客'
, cost AS '費用'
, category AS 'カテゴリ'
FROM
item;

CHECK

条件に合わなければ、書き込みを拒否される

CHECK( 条件式 )

GROUP BY

  • 特定の列の数値によって、切り分ける。(最大値、最小値など)

IN

複数の値のうちいずれかと一致している行を抽出する。

SELECT * FROM テーブル名 WHERE カラム名? IN ('値1', '値2');

LIKE

  • 文字列検索

ワイルドカード

  • % … 0文字以上の任意の文字列
  • _ … 任意の1文字

ORDER BY

SELECT

SELECT 列名,列名,…
 FROM テーブル名

*(アスタリスク) … 全ての列

DISTINCT

SELECTで抽出した、レコードで重複しているものを除外する

WHERE

条件を指定して選択します。

SELECT 列名 FROM
 テーブル名 WHERE 条件A AND 条件B;

{SQLの命令文} WHERE [列1] = [値];

解答法

HAVING

集合関数を使って行を絞る

CASE

CASE
 WHEN {条件式} THEN {真の場合の値}
 WHEN {条件式} THEN {真の場合の値}
 …
 ELSE {偽の場合の値}
END

集合関数

AVG

平均値を求める

COUNT

個数を求める

MIN

最小値を求める

MAX

最大値を求める

SUM

合計値を求める

select SUM(列名) from (テーブル名) 

条件付き
select SUM(列名) from (テーブル名) where (条件式)

グループ
select SUM(列名) from (テーブル名) group by (列名)

副問合せ

<手順>

  1. 副問合せ
  2. ①の結果を使用して主問合せをする
SELECT * FROM 従業員表
 WHERE 年齢 <> ( SELECT MAX(年齢) FROM 従業員表 )

… 副問合せ
https://www.foresight.jp/fe/column/sql/
https://tech-blog.rakus.co.jp/archive/category/PostgreSQL
【Snow Monkey】Googleサーチコンソール登録

Googleサーチコンソール登録手順

1)【Googleサーチコンソール】HTMLタグの値を確認

▼Googleサーチコンソールにログイン「設定」→「ユーザーと権限」を選択

▼三点ドットを選択→「所有権の確認の詳細」をクリック

▼HTMLタグが確認できます

2)【Snow Monkey】HTMLタグの入力

▼ワードプレス管理画面→「外観」「カスタマイズ」→「SEO」→「Googleサーチコンソール」を選択

▼先ほど確認したHTMLタグのxxxxxの部分を張り付け→公開

3)【Googleサーチコンソール】プロパティを追加

▼「プロパティを追加」をクリック

▼プロパティタイプの選択でドメインの入力欄に該当サイトのドメインを入力

▼確認をクリック

参考サイト

この<meta name=”google-site-verification” content=”xxxxx” />をどこで確認したら良いのかがわからないです。
https://snow-monkey.2inc.org/forums/topic/%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%9e%e3%82%a4%e3%82%ba%e3%81%aegoogle%e3%82%b5%e3%83%bc%e3%83%81%e3%82%b3%e3%83%b3%e3%82%bd%e3%83%bc%e3%83%ab%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6

GoogleサーチコンソールのHTMLタグを再確認する方法
https://kikuchi-web.com/googlesearchconsole-reconfirmation

Laravelの開発環境をDockerで構築

手順

必要な準備

  • Dockerのインストール: Docker Desktopをインストールしておいてください。
  • Docker Compose: Docker DesktopにはDocker Composeが含まれているので、追加インストールは不要です。

ディレクトリ構成

laravel-circulation
├── docker-compose.yml        # Docker Compose設定ファイル
├── nginx
│   └── default.conf          # Nginxの設定ファイル
└── src
    ├── app                   # Laravelのアプリケーションコード
    ├── bootstrap             # Laravelのブートストラップファイル
    ├── config                # 設定ファイル
    ├── database              # データベースマイグレーション等
    ├── public                # Webサーバが公開するディレクトリ (index.phpなど)
    ├── resources             # ビューやフロントエンドリソース
    ├── routes                # ルーティング設定
    ├── storage               # ストレージ関連 (ログなど)
    ├── tests                 # テストファイル
    └── vendor                # Composerでインストールされたパッケージ

docker-compose.yml の作成

Laravelとその関連サービス(Webサーバーやデータベース)の設定を行います。

以下の例は、NginxをWebサーバーに使い、MySQLをデータベースに設定しています。

version: '3.8'

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: laravel_app
    working_dir: /var/www/html
    volumes:
      - ./src:/var/www/html
    networks:
      - laravel_network

  webserver:
    image: nginx:alpine
    container_name: laravel_webserver
    working_dir: /var/www/html
    volumes:
      - ./src:/var/www/html
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    ports:
      - "8080:80"
    networks:
      - laravel_network

  db:
    image: mysql:8.0
    container_name: laravel_db
    environment:
      MYSQL_ROOT_PASSWORD: root_password
      MYSQL_DATABASE: laravel
      MYSQL_USER: laravel_user
      MYSQL_PASSWORD: laravel_password
    volumes:
      - dbdata:/var/lib/mysql
    ports:
      - "3306:3306"
    networks:
      - laravel_network

networks:
  laravel_network:
    driver: bridge

volumes:
  dbdata:

Nginxの設定ファイル nginx/default.conf の作成

server {
    listen 80;
    index index.php index.html;
    server_name localhost;
    root /var/www/html/public;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Dockerfile

DockerfileでComposerのインストール

# ベースイメージを指定
FROM php:8.1-fpm

# システムの依存関係をインストール
RUN apt-get update && apt-get install -y \
    git \
    unzip \
    libzip-dev \
    libicu-dev \
    libonig-dev \
    libpng-dev \
    libjpeg-dev \
    libfreetype6-dev \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install \
        pdo_mysql \
        zip \
        intl \
        opcache \
        gd

# Composerのインストール
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# 作業ディレクトリを設定
WORKDIR /var/www/html

# アプリケーションファイルの権限を設定
RUN chown -R www-data:www-data /var/www/html

Laravelのインストール

次に、Dockerコンテナ内でLaravelをインストールします。

# Dockerコンテナを起動
docker-compose up -d

# Laravelをインストール
docker-compose exec app composer create-project --prefer-dist laravel/laravel .

参考サイト

UnexpectedValueException PHP 8.1.30 10.48.22 The stream or file “/var/www/html/storage/logs/laravel.log” could not be opened in append mode: Failed to open stream: Permission denied The exception occurred while attempting to log: The stream or file “/var/www/html/storage/logs/laravel.log” could not be opened in GitHub Copilot このエラーは、Laravelアプリケーションがログファイルに書き込もうとした際に、 ファイルの書き込み権限が不足しているために発生しています。以下の手順で解決できます。 1)Dockerコンテナに入る docker exec -it <コンテナ名> /bin/bash 2)権限を変更する chmod -R 775 /var/www/html/storage chown -R www-data:www-data /var/www/html/storage 【Laravel】 Bladeテンプレートエンジンを使用する場合、 ファイル名の末尾に.blade.phpを付ける必要があります。 php artisan serveは、Laravelアプリケーションのためのビルトイン開発サーバーを起動するコマンドです https://reffect.co.jp/laravel/laravel-breeze-next-js https://www.udemy.com/course/nextjslaravelbreeze/?srsltid=AfmBOop6AB002927qfNnmtNHzLx2oS9NSaeWHsnH8TJoPRcB0iE2DFNa&couponCode=ST6MT103124 Breezeとは Laravel Breezeは、Laravelアプリケーションにシンプルで軽量な認証機能を提供するスターターパッケージです。 ユーザー登録、ログイン、パスワードリセットなどの基本的な認証機能をすぐに利用できるようにします。 Breezeのインストール手順 以下の手順に従って、Laravel Breezeをインストールします。 ComposerでBreezeをインストール docker exec -it laravel_app composer require laravel/breeze –dev Breezeのインストール docker exec -it laravel_app php artisan breeze:install NPMパッケージのインストールとビルド docker exec -it laravel_app npm install docker exec -it laravel_app npm run dev マイグレーションの実行 docker exec -it laravel_app php artisan migrate Dockerに入る docker exec -it laravel_app /bin/bash コンテナ内でLaravelの開発サーバーを起動 root@25a3630a398d:/var/www/html# php artisan serve php artisan serveは不要: Dockerを使用する場合、php artisan serveコマンドは通常必要ありません。 このコマンドは主に、Dockerを使用せずにローカル環境で開発する場合に便利です。

「WordPress」をDockerで環境構築、WP本体をドキュメントルート直下ではなくサブディレクトリ配置する場合やphp.iniカスタムについても解説

【簡単】WordPress環境をDockerで構築手順

1)作業フォルダを作成

2)1)内に「docker-compose.yml」を作成

version: "3.7"
services:
 db:
  image: mysql:8.0
  container_name: mysql8
  restart: always
  environment:
    MYSQL_ROOT_PASSWORD: password # rootユーザのパスワード
    MYSQL_DATABASE: db_local # WordPress用データベース名
    MYSQL_USER: wp_user # WordPress用データベース接続ユーザ名
    MYSQL_PASSWORD: password # WordPress用データベース接続パスワード
 WordPress:
  image: wordpress:latest
  container_name: wordpress
  restart: always
  depends_on:
     - db
  ports:
     - 10090:80
  environment:
    WORDPRESS_DB_HOST: db:3306 # データベースサーバ名:ポート番号
    WORDPRESS_DB_USER: wp_user # WordPress用データベース接続ユーザ名(dbの内容に合わせる)
    WORDPRESS_DB_PASSWORD: password # WordPress用データベース接続パスワード(dbの内容に合わせる)
    WORDPRESS_DB_NAME: db_local # WordPress用データベース名(dbの内容に合わせる)
    WORDPRESS_DEBUG: 1 # デバッグモードON
  volumes:
    - ./wp-content:/var/www/html/wp-content
  #    - ./html:/var/www/html
 phpmyadmin:
  image: phpmyadmin/phpmyadmin:latest
  container_name: phpmyadmin_ingrid
  restart: always
  depends_on:
     - db
  ports:
     - 10099:80

volumesは画像のパス等にあわせてください

ボリュームマウントの概念

Dockerコンテナは、デフォルトで隔離された環境を提供します。これにより、コンテナ内のファイルシステムはホストマシンから独立しています。しかし、多くの場合、ホストマシン上のファイルやディレクトリをコンテナ内で直接利用したい場合があります。このような場合にボリュームマウントが使用されます。

ボリュームマウントの構文は以下の通りです

volumes:
  - <ホストのパス>:<コンテナのパス>
Host Machine ./wp-content/ themes/ plugins/ uploads/ languages/ WordPress Container /var/www/html/wp-content/ themes/ plugins/ uploads/ languages/

3)作業ディレクトリにて下記コマンド

docker-compose up -d

多少時間がかかるかもしれません。

4)「Docker Desktop」で確認

エラーログの確認方法

1. Dockerコンテナ内でWordPressのエラーログを有効化

まず、WordPressのwp-config.phpにエラーログを有効にする設定を追加します。

phpコードをコピーするdefine('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

この設定により、エラーログがwp-content/debug.logに保存されます。

2. Dockerコンテナ内でエラーログを確認する

方法1: docker-compose execでコンテナ内に入って確認

Dockerコンテナ内に直接アクセスして、エラーログを確認することができます。

bashコードをコピーするdocker-compose exec <コンテナ名> bash

コンテナ内に入ったら、エラーログファイルにアクセスします。

bashコードをコピーするcat /var/www/html/wp-content/debug.log

<コンテナ名> は、WordPressが稼働しているコンテナの名前に置き換えてください。

方法2: docker-compose logsでコンテナのログを直接表示

WordPressやApache/Nginxのエラーログは、コンテナの標準出力にも表示される場合があります。以下のコマンドでログ全体を確認できます。

bashコードをコピーするdocker-compose logs -f <コンテナ名>

上記コマンドで、リアルタイムにエラーログを追跡しながら確認できます。

方法3: ログファイルをホストマシンにマウント

Dockerのdocker-compose.ymlファイルで、WordPressのwp-contentディレクトリをホストマシンと共有すると、ホスト側で直接debug.logを確認できます。たとえば、以下のように設定を変更します。

yamlコードをコピーするservices:
  wordpress:
    volumes:
      - ./wp-content:/var/www/html/wp-content

これにより、./wp-content/debug.logでホスト側からログを確認できるようになります。

「php.ini」の設定で、WordPressのアップロード制限やメモリ使用量を設定する方法

1)docker-compose.ymlの環境変数で設定

version: '3.8'

services:
  wordpress:
    image: wordpress:latest
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: user
      WORDPRESS_DB_PASSWORD: password
      WORDPRESS_DB_NAME: wordpress
      PHP_UPLOAD_MAX_FILESIZE: 128M
      PHP_POST_MAX_SIZE: 128M
      PHP_MEMORY_LIMIT: 128M

2)カスタムPHP設定ファイルをマウントする方法

php.iniを作成

upload_max_filesize = 128M
post_max_size = 128M
memory_limit = 128M

docker-compose.yml でマウント設定

services:
  wordpress:
    image: wordpress:latest
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: user
      WORDPRESS_DB_PASSWORD: password
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - ./wordpress_data:/var/www/html
      - ./php.ini:/usr/local/etc/php/conf.d/custom.ini

WP本体インストールをドキュメントルート直下ではなく、別のサブディレクトリでしたい場合(複雑)

docker-compose.yml

version: '3'

services:
  wordpress:
    image: wordpress:6.4-php8.1
    restart: always
    ports:
      - 8080:80
    volumes:
      - ./public:/var/www/html
      - ./docker-entrypoint.sh:/usr/local/bin/docker-entrypoint.sh
    working_dir: /var/www/html/wp
    environment:
      - WORDPRESS_DB_HOST=db
      - WORDPRESS_DB_USER=wordpress
      - WORDPRESS_DB_PASSWORD=wordpress
      - WORDPRESS_DB_NAME=wordpress
      - WORDPRESS_CONFIG_EXTRA=
        define('WP_HOME', 'http://localhost:8080');
        define('WP_SITEURL', 'http://localhost:8080/wp');

  db:
    image: mysql:8.0
    restart: always
    environment:
      - MYSQL_DATABASE=wordpress
      - MYSQL_USER=wordpress
      - MYSQL_PASSWORD=wordpress
      - MYSQL_ROOT_PASSWORD=somewordpress
    volumes:
      - db_data:/var/lib/mysql

volumes:
  db_data:

working_dirでコンテナ内での作業ディレクトリを指定

working_dirはコンテナ内での作業ディレクトリを指定する設定です。コンテナ内でコマンドを実行する際の基準となります。

volumes: /var/local/wordpress:/var/www/html/wp
working_dir: /var/www/html/wp

この状態でdocker-compose upでイメージからコンテナのを新規作成をすると

– コンテナ内の /var/www/html/wp にファイルを展開

– volumesマウントにより、ホスト側の /var/local/wp にも同じファイルが表示される

2. ボリュームマウント Host Machine /var/local/wp/ Container /var/www/html/wp/ volumes mount 3. WordPressファイル展開 Host Machine /var/local/wp/ wp-admin/ wp-content/ wp-includes/ Container /var/www/html/wp/ wp-admin/ wp-content/ wp-includes/ リアルタイム同期

docker-entrypoint.shでindex.php.htaccessの設定

.sh ファイル(シェルスクリプト)とは

.sh ファイル(シェルスクリプト)は、Unix系システム(LinuxやmacOSなど)でコマンドを自動化するために記述されるスクリプトファイルです。

公式docker-entrypoint.shリポジトリのファイル下部を追記

公式docker-entrypoint.shリポジトリ
https://github.com/docker-library/wordpress/blob/master/docker-entrypoint.sh

...
			fi
		done
	fi
fi

# ↓ 追記部分 ↓

if [ -e /var/www/html/wp/index.php ] && [ -e /var/www/html/wp/.htaccess ] && [ ! -e /var/www/html/index.php ] && [ ! -e /var/www/html/.htaccess ]; then
    sed -i -e 's/\/wp-blog-header\.php/\/wp\/wp-blog-header.php/g' /var/www/html/wp/index.php
    mv /var/www/html/wp/.htaccess /var/www/html/.htaccess
    mv /var/www/html/wp/index.php /var/www/html/index.php
fi

# ↑ 追記部分 ↑

exec "$@"
  1. ファイルの確認
    • wpディレクトリにindex.phpが存在
    • wpディレクトリに.htaccessが存在
    • ルートにindex.phpが存在しない
    • ルートに.htaccessが存在しない
  2. index.phpの中のパス参照を修正
  3. index.phpと.htaccessをwpディレクトリからルートに移動
処理前 /var/www/html/ wp/ index.php require(‘wp-blog-header.php’) .htaccess 処理後 /var/www/html/ index.php require(‘wp/wp-blog-header.php’) .htaccess wp/ その他のWordPressファイル ファイル移動 パス修正 1. 必要なファイルの存在確認 2. index.php内のパス参照を修正 3. index.phpと.htaccessをルートディレクトリに移動 ※ これによりWordPressをサブディレクトリ(wp/)で動作させることができます

参考サイト

WordPress on DockerでWP自体をサブディレクトリにインストールし、index.phpと.htaccessを自動で移動&書き換えする
https://note.com/kezzytak/n/n4f9ac97466f2

【基本情報】テクノロジ

ハードウェア

AND演算(論理積)

入力入力出力
000
010
100
111

NOR演算(否定論理和)

入力入力出力
001
010
100
110

NAND演算(否定論理積)

入力入力出力
001
011
101
110

XOR演算(排他的論理和)

入力入力出力
000
011
101
110

データベース

https://ntorelabo.com/?p=6190

セキュリティ

動的解析(ブラックボックス解析)

検体を実際に動作させる

静的解析(ホワイトボックス解析)

動作させず、内部構造の解析をする

公開鍵暗号方式

  • 公開鍵暗号方式は、共通鍵暗号方式より処理が遅い

<暗号化:受信者がペアで作る>

<デジタル著名:送信者がペアで作る>

暗号化受信者が作成受信者公開鍵で暗号化、受信者秘密鍵で複合
デジタル著名送信者が作成送信者秘密鍵で作成、送信者公開鍵で検証

RSA

公開鍵暗号方式の暗号技術

公開鍵基盤

  • PKI
  • 公開鍵の認証

共通鍵暗号化方式

  • 暗号化複合化で同じ鍵
  • 処理速度が速い
  • 事前に鍵を渡す必要があり、限られた相手との通信に向いている。

ファイアウォール

DMZ

内部(Inside)ゾーン外部から守るべきネットワーク。基本的に信頼できるものとして扱う。
外部(Outide)ゾーン攻撃元となる可能性のあるネットワーク。基本的に信頼できないものとして扱う。
DMZ
(DeMilitarized Zone)
非武装ゾーン:内部と外部の中間。基本的に外部からアクセスできるのはこのゾーン

プロキシサーバ

  • インターネット接続ができていない内部ネットワーク代理でインターネットに接続する
  • キャッシュ機能 → 高速マルウェアを検出

リバースプロキシ

  • ウェブ閲覧者代理でウェブサーバに接続する
  • ウェブサーバへの攻撃を防ぐ

基礎理論

浮動小数点数

32ビット形式

  • 符合 … 正→0、負→1
  • 指数部 … 2のn乗のn数値を2進数で表記
  • 仮数部 … 正規化した小数点以下の数値
    (※正規化 0.01 → 0.1 × 2の−1乗)

EEE754

例)

  1. 元の数  -(1000111)(2進数) × 2(0乗)
  2. 正規化  (1.000111)(2進数) × 2(6乗)
  3. 符合、指数、仮数を計算
    • 符合:+ → 0、− → 1
    • 指数:+127
      6 + 127 = 133
      =(10000101)(2進数)
    • 仮数:整数部1を削除
      1000111 → 000111
  4. 110000101000111

誤差

桁落ち

絶対値の差が小さい2つの値の差

情報落ち

大きい値と小さい値の計算で小さい値の情報が無視されてしまう

CRC方式

生成多項式によって、誤り検出用データを付加

システム開発技術

スタブ

トップダウンテストで、下位のモジュールとしての、テスト用モジュール

ドライバ

ボトムアップテストで、上位のモジュールとしての、テスト用モジュール

E-R図

  • Entity(実体) Relationship Diagram
  • エンティティと呼ばれる四角形ををリレーションと呼ばれる線でつなぎます。
Photoshop

デザインのコツ

黄金比を意識した縦横比

1.618で割るもしくはかける

メニューバー

イメージ

色調補正

カラーバランス

レイヤー

切り抜き等で生じた、境界線の不自然な状態を調節します。

メニューバーのレイヤー → マッティング → フリンジ削除、黒マット削除、白マット削除

編集メニュー

画像の移動と変形

フィルターメニュー

ぼかし → ぼかし(放射状)

ツールバー

自動選択ツール

許容値高いほどより広い範囲の色が選択。
アンチエイリアスキレイになるので基本チェック
隣接チェックを外すと隣接していない部分もまとめて選択。

スポット修正ブラシツール

汚れやテキストを消すことができます。

グラデーションツール

https://mappyedit.com/photoshop-add-gradients/

テキストツール

テキストボックス

横書き文字ツールを選択してテキストボックスの設置したい範囲をドラッグで指定。
テキストは貼り付け。

文字マスクツール

画像を文字で切り抜くとき使います。

カスタムシェイプツール

オプションバーから色んな種類を選択できます。

パネル

レイヤーパネル

レイヤースタイルを追加

ベベルとエンボス

クリッピングマスクを作成

  • 2枚のレイヤーを使用して作成
JavaScript基本サンプルコード

JavaScriptローカル実行環境構築

https://qiita.com/Toshihiro_Watanabe_/items/19e4b83bc9718451984f

上記サイト参考にしたところWindows環境だとエラーが起きたため下記のように修正しました。

{
    "scripts": {
        "1": "node main < case1.txt",
        "2": "node main < case2.txt",
        "3": "node main < case3.txt",
        "4": "node main < case4.txt",
        "5": "node main < case5.txt",
        "new": "copy main.template.js main.js && type nul > case1.txt && type nul > case2.txt && type nul > case3.txt && type nul > case4.txt && type nul > case5.txt"
    }
}
要素(画像、動画、音声、フォーム)

media属性

media属性の値説明
all全てのメディア(デフォルト)
screen一般的なディスプレイ
printプリンタ
projectionプロジェクター
handheld携帯電話などの小さな機器
braille点字ディスプレイ
embossed展示プリンタ
speech音声読み上げソフト
ttyターミナル
tvテレビ

media要素

img要素

属性
srcデータのアドレス(必須
alt画像が利用できない場合に代わりに使用されるテキスト
限定的な場合で省略可能
srcset候補画像 … URLと記述子
sizesメディアクエリと表示幅
width
height
幅、高さ(整数)
  • 「x」は必ず小文字
  • 浮動小数点数
  • デフォルト値は「1x」

picture要素

picture要素は子要素にsource要素とimg要素をもち、画面幅にあわせて画像を切り替えて表示することができます。

CSSのdisplayプロパティを使い、表示・非表示を切り替える場合と違い、最適な画像のみ読みこむので、不要な画像の読み込みによる表示速度の低下が起きません。

<picture>
  <source media="(min-width: 961px)" srcset="img-pc.jpg">
  <source media="(min-width: 641px)" srcset="img-medium.jpg">
  <img src="img-small.jpg">
</picture>
  • imgは1個必須
  • sourceは0個以上

source要素

picture要素内のsource要素に指定可能な属性

source要素src属性は指定できない

属性
media画像の使用条件 メディアクエリ
srcset候補画像 … URLと記述子
必須
sizesメディアクエリと表示幅
type画像の種類 … MINEタイプ
width
height
幅、高さ(整数)

video、audio要素内のsource要素に指定可能な属性

  • src
  • crossorigin
  • poster
  • preload
  • autoplay(論理属性)
  • loop(論理属性)
  • muted(論理属性)
  • controls(論理属性)
  • width
  • height
属性
srcデータのアドレス
必須
type画像の種類 … MINEタイプ

audio要素

video要素

video要素で指定可能な属性

  • autoplay:自動再生
  • loop:ループ再生
  • muted:ミュート
  • controls:コントロール表示
  • playsinline:インライン再生
  • preload:事前読み込み
  • poster:サムネイル画像

<javascriptで操作可能>

  • コンテンツの再読み込み
  • 再生開始、中断
  • 再生位置の変更

<データを取得利用>

  • コンテンツが再生・早送り可能な状態か
  • 再生メニューの表示、非表示
  • ネットワークの状態
  • エラー内容
  • コンテンツの場所
  • コンテンツの長さ
  • 音量(0〜1)
  • トラック情報
<video controls>
<source src="〇〇/〇〇" type="video/〇〇">
<source src="〇〇/〇〇" type="video/〇〇">
</video>

コーデック

ファイルを圧縮・変換するためのアルゴリズム

オーディオコーデック … AAC(スタンダード、MP3(古い動画圧縮形式、Vorbis(Google陣営の標準)
ビデオコーデック … H.264(最新規格、VP8、VP9(Google陣営の標準、Theora(低普及、主にOGGコンテナで利用)

コンテナ

複数のコーデック(圧縮変換アルゴリズム)、データの種類をまとめたもの

<video要素がサポートしているコンテナ>

  • WebM
  • MP4
  • Ogg
ファイル形式(コンテナ)拡張子MINEタイプ
MPEG
古い動画形式
.mpg .mpegvideo/mpeg
MP4.mp4video/mp4
WebM
Google陣営の標準動画形式
.webmvideo/webm
Ogg
低普及
.ogvvideo/ogg
QuickTime.movvideo/quicktime
ファイル形式(コンテナ)拡張子MINEタイプ
MP3.mp3audio/mpeg
AAC.m4aaudio/aac
Ogg.oggaudio/ogg
WAVE.wavaudio/wav

track要素

  • audio要素もしくはvideo要素の子要素
  • 外部テキスト・トラックを指定する空要素
    テキスト用ファイル(WebVTT:Web Video Text Tracks)に、hh:mm:ss:tttの時間単位で指定

canvas要素

  • JavaScriptで図を作成できる要素
  • ビットマップで描画
  • ベクター画像の描画はできない
  • 拡大縮小で画像が荒くなる
  • PNG、GIF、JPEGなどの画像を利用できる
属性説明
width正の整数描画できる領域の幅
(デフォルト300px)
height正の整数描画できる領域の高さ
(デフォルト150px)




form要素

<<form>タグで定義したidを指定することで、<form>タグ外で定義したタグと、<form>の関連付けをします。>

<form action="" method="post" id="form1">
<textarea name="in1" cols="30" rows="3" maxlength="90" required>
</textarea>
</form>
<input type="submit" name="test1" value="送信" form="form1">

<部品が外部にあるとき>
部品のform属性をform要素のid属性を指定して関連づけができる

【formの部品】

氏名:


【form要素】

<p>【formの部品】</p>
<p>氏名:<input type="text" name="name" form="test"></p>
<br>
<p>【form要素】</p>
<form method="post" action="" id="test">
<p><input type="submit" value="送信する"></p>
</form>

<label要素にfor属性>

<form action="" method="post">

<p>
<label for="name1">お名前1:</label>
<input type="text" id="name1" name="name1">
</p>

<p><input type="submit" value="送信"></p>

</form>
属性名
novalidate入力データのチェックを行わない
論理属性
autocomplete・前に入力した内容が入力候補として表示
on(規定値)/off

input要素

属性名
typeフォーム部品の種類
accepttype=”file”のとき受付可能なファイル
MINEタイプ(カンマ区切り)
autocomplete要素のオートコンプリート機能
formフォーム部品を特定のform要素(id属性の値で指定)と関連づける
formnovalidate入力データのチェックを行わない
論理属性

<autocompleteの属性値>

属性値
on自動保管機能ON
off自動保管機能OFF
name氏名
email電子メール
new-password新規パスワード

<input要素type属性一覧>

text : password : search : email : url : tel : number : range : checkbox : radio : submit : reset : button : image(画像ボタン) : file : color : range : date : month : week : time : datetime-local(タイムゾーンなし) : hidden(表示させず送信する) :
type属性
email「@」をがないと警告が出る
range・スライダー
fileaccept=”MIMEタイプ” … ファイルの種類
multiple=”論理属性” … 複数データの許可
required=”論理属性” … 入力・選択を必須に

textarea要素

属性
cols1行に入力可能な文字数
rows入力欄の行数
resizenone … リサイズ不可。
horizontal … 水平方向のみリサイズ可。
vertical … 垂直方向のみリサイズ可。
both … 水平・垂直方向ともリサイズ可。(デフォルト)

capture 属性

説明
userスマートフォンの画面側のカメラやマイクが起動
environment外向きのカメラやマイク起動

progress要素

  • 進捗状況
  • value=”〇〇” … 現在の値
  • max=“〇〇” … 全体の値
<p>progress要素 … 進捗状況 
<progress value="40" max="100">40%</progress>
</p>
<p>progress要素 … value属性指定なし
<progress>処理中</progress>
</p>
<p>meter要素 … 〇〇の測定値
<meter value="91200000000" min="0" max="160000000000">91,200,000,000バイト使用</meter>
</p>

meter要素

value=””現在の値
必要属性
min=””最小値
max=””最大値
low=””低い領域
high=””高い領域
optimum=””最適な値

keygen

  • 公開鍵暗号方式
  •  秘密キーはローカル環境に保存され、公開キーはサーバーに送信
<form>
  <keygen name="key"/>
  <button>送信</button>
</form>

datalist要素

  • option要素でドロップダウン選択肢を作成
  • 【関連づける】datalist要素のid要素input要素のlist属性
<p>
 <label>
  学習している資格:
 <input type="text" list="study">
 <datalist id="study">
  <option value="HTMLプロフェッショナル認定試験">
  <option value="CCNA">
 </datalist>
 </label>
</p>

label要素

<label要素とフォーム部の関連付け>

(labelの中にフォームを入れる)

<label><input type="radio" name="form1" value="father">父</label>
<label><input type="radio" name="form1" value="mother">母</label>
(フォームのid属性を指定 → labelのfor属性でid属性を関連付ける)

<input type="radio" name="form1" value="father" id="id1">
<label for="id1">父</label>

fieldset要素

  • フォーム関連の要素をグループ化

legend要素

  • fieldset要素のグループ名(キャプション)を表示させる

select要素

  • option要素でドロップダウン選択肢を作成
  • 選択肢以外は入力不可
<select id="drink">
  <option value="0">選択してください</option>
  <option value="1">オレンジジュース</option>
  <option value="2">コーヒー</option>
  <option value="3">紅茶</option>
  <option value="4">ウーロン茶</option>
</select>

embed要素

プラグインを使用して外部データを組み込むための空要素

object要素

  • 様々な形式の外部データを組み込みます
  • data属性でファイルを指定し、type属性でMIMEタイプを指定

param要素

  • この要素は廃止されてる
  • object要素によって呼び出されたプラグインのパラメータを設定
  • object要素の子要素

data属性

  • カスタムデータ属性と呼ばれる
  • JavaScriptと組み合わせて使う
  • 制限あり
    • xml始めない
    • コロン (:)  ×
    • 大文字のAからZ ×
<div data-〇〇=”□□”>サンプル</div>

セレクタ[data-○○=”□□”]{
 プロパティ:値;
}

kbd要素

キーボード入力

samp要素

コンピュータからの出力

さくらインターネットにGitHubからクローンする手順

ローカルからさくらインターネットにssh接続

.sshディレクトリ作成

.sshディレクトリとは?

.sshディレクトリは、SSH(Secure Shell)に関する鍵や設定ファイルを保存するためのディレクトリです。SSHでの安全な接続を確立するために、公開鍵や秘密鍵が必要になるため、このディレクトリが使用されます。

ユーザーのホームディレクトリ直下(~/.ssh/)に作成

このディレクトリは通常、ユーザーのホームディレクトリ直下(~/.ssh/)に配置されます。

アクセス権限を自分のみに制限し、セキュリティを確保するための設定

mkdir ~/.ssh
# アクセス権限を自分のみに制限し、セキュリティを確保するための設定
chmod 700 ~/.ssh

SSH鍵の生成

もしまだSSH鍵を作成していない場合、以下のコマンドをPowerShellで実行して鍵を作成できます

# SSH鍵を生成する(RSA方式、鍵長4096ビット)
ssh-keygen -t rsa -b 4096
.ssh/
├── id_rsa             # 秘密鍵(サーバーにアクセスする際に使用)
├── id_rsa.pub         # 公開鍵(サーバーに登録し、鍵認証で接続)
└── known_hosts        # 接続したことのあるホスト(サーバー)のリスト
sakura internet

開鍵のさくらサーバーへの登録

さくらの管理画面から、生成した公開鍵(~/.ssh/id_rsa.pub の内容)を登録します。

「サーバー情報」→「SSH公開鍵」→「新規追加」クリック

.ssh/configファイルの設定

.ssh/config ファイルに追加する設定は、SSH接続を簡略化し、複数のサーバーにアクセスする際の手間を減らすためのものです。ここでは、さくらインターネットのレンタルサーバーに接続するための設定について詳しく説明します。

~/.ssh/configファイルに以下のような設定を追加します:

# 接続名を定義する(例として「sakura」を設定)
# 「ssh sakura」と入力するだけで接続できるようになる
Host sakura
    # 接続先のIPアドレスまたはドメイン名を指定
    # ここにはさくらインターネットのサーバーのIPやホスト名を記述
    HostName [さくらサーバーのIPアドレスまたはホスト名]
    # SSHでログインするユーザー名
    # さくらのアカウント名を記述
    User [さくらのアカウント名]
    # SSH接続に使用するポート番号
    # 通常22がデフォルトポート
    Port 22
    # 使用する秘密鍵ファイルのパスを指定
    # デフォルトの鍵(~/.ssh/id_rsa)を使用
    IdentityFile ~/.ssh/id_rsa
.ssh/
├── config             # SSHの接続設定ファイル(複数サーバーの設定が可能)
├── id_rsa             # 秘密鍵(サーバーにアクセスする際に使用)
├── id_rsa.pub         # 公開鍵(サーバーに登録し、鍵認証で接続)
└── known_hosts        # 接続したことのあるホスト(サーバー)のリスト

さくらインターネットにssh接続

ssh sakura

Are you sure you want to continue connecting (yes/no/[fingerprint])?

このメッセージは、初めて新しいホストに接続しようとしている際に表示される標準的なセキュリティ警告です。

さくらインターネットの管理画面やドキュメントでホストのフィンガープリントを確認 → ”yes” と入力して続行します。

さくらインターネットからGitHubにssh接続

bashに変更

% bash
[siennahare23@www3910 ~]$

公開鍵と秘密鍵を作成

[siennahare23@www3910 ~]$ cd ~/.ssh
[siennahare23@www3910 ~/.ssh]$ ssh-keygen -t rsa -b 4096

鍵の名前、パスフレーズを要求されますが、「Enter」で進めるとデフォルトの名前(「id_rsa」、「id_rsa.pub」)でパスフレーズを必要としない鍵のペアが生成されます

SSH鍵を生成すると、以下のようなメッセージが表示されます。このメッセージには秘密鍵の保存場所、公開鍵の指紋(Fingerprint)、ランダムアート画像などが含まれます。

Generating public/private rsa key pair.en -t rsa -b 4096
Enter file in which to save the key (/home/siennahare23/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/siennahare23/.ssh/id_rsa.
Your public key has been saved in /home/siennahare23/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:3x+egZ5oS58YhHEoWZbiDnzFg+00qH2/y/Da9G1olgQ siennahare23@www3910.sakura.ne.jp
The key's randomart image is:
+---[RSA 4096]----+
|       =o.       |
|      ++O.       |
|   . +o=oo.      |
|    + +.o+E      |
|     + .S...     |
|      .  o....   |
|        . =oooo  |
|         BoB=*.+ |
|        .oO=*.=  |
+----[SHA256]-----+

実際に使用する際には、秘密鍵 (id_rsa) の内容は絶対に公開しないように注意しましょう。

Githubに公開鍵を登録

公開鍵の内容を表示し、全文コピーします

cat ~/.ssh/id_rsa.pub

コピーした公開鍵の内容をはりつけ

configファイルの作成

[siennahare23@www3910 ~/.ssh]$ touch ~/.ssh/config

config

※秘密鍵の名前を変更している場合はデフォルトの「id_rsa」から変更する必要があります

Host github.com
  HostName github.com
  IdentityFile ~/.ssh/id_rsa
  User git
# GitHubにSSH接続のテストを行うためのコマンド
ssh -T git@github.com

このコマンドを実行すると、GitHubに鍵を登録していれば次のようなメッセージが表示されます

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

GitHubからリポジトリをクローン

方法1:HTTPS方式 (https://github.com/...)

  • パスワードまたはPersonal Access Tokenが必要
  • プロキシ環境でも動作
  • 認証の度に認証情報の入力が必要
git clone https://github.com/yourusername/your-repository.git .

方法2:SSH方式 (git@github.com:…):

git clone git@github.com:ida240609/src.git .
  • SSH鍵による認証 より安全
  • パスワード入力不要 一度設定すれば再認証不要
  • セキュアな通信
APIの基礎知識

マルチメディア・
グラフィック系

SVG

  • ベクターイメージ(情報を数値化して記録)
  • → 複雑な画像の表示は処理速度が低下
  • XML
  • 拡大・縮小後も画像が劣化しない
  • 描写した図形はDOM要素 → JavaScriptで操作可能

ストリーミング配信

  • HLSMPEG-DASH
  • ダウンロードの完了待たずに再生可能
  • HTTPサーバで配信隣ブラウザでの再生が主流
  • プラグイン不要
  • ファイルとして残らないため → 著作権の保護

HLS

  • HTTP Live Streaming
  • Apple社
  • ストリーミングプロトコル
  • HTTP

MPEG-DASH

  • 「Dynamic Adaptive Streaming over HTTP」
  • 国際標準ストリーミングプロトコル
  • HTTPベース
  • ファイルのコーデックに依存しない

Media Source Extensions

  • video要素とaudio要素を拡張
  • JavaScriptのAPI
  • HLS、MPEG-DASHをサポート
  • プラグイン無しでサポート
  • 動画を分割 → 編集、広告挿入
  • ネットワークに応じてストリーミングのビットレートを変更 → 途切れず再生
  • ライブ配信は時間を過ぎれば視聴不可

DRM

  • Digital Rights Management
  • 特定のソフトウェアまたはハードウェアでのみ再生可能

Encrypted Media Extensions

DRMで暗号化されたコンテンツをブラウザで復号する際使用

DOM

  • Document Object Model
  • HTML、XMLを取り扱うためのAPI 
  • 階層構造のドキュメントツリー(DOMツリー

デバイスアクセス系

Payment Request API

HTML5で利用できる決済API

Generic Sensor API

デバイスのセンサーにアクセスするAPIは値を取得する方法はバラバラですが、Generic Sensor APIは統一的にするAPIです。

  • JavaScriptから各種センサーにアクセスする方法を統一
  • 環境光、近接、磁気、加速度、線形加速度、ジャイロスコープ、絶対方位、相対方位、重力

Geolocation API

  • 緯度、経度
  • 高度、経度の精度
  • 高度
  • 高度の精度
  • 方角
  • 速度
  • ユーザの許可が不要
  • ユーザの環境依存

Notifications API

通知

Ambient Light Event

デバイス付近の照度(光量レベル)を取得

Drag and Drop API

ファイルをドラッグ&ドロップ

File API

<input type=file multiple> → JavaScriptで処理

Progress Events

プログレスバー

DeviceMotion Event

加速度センサー

UI Events

DOM3 Events(UI Events)マウス、キーボード
Touch Eventsタッチパネル、トラックパッド
Pointer Eventsマウス、ペン、タッチパネル
DeviceOrientation Eventデバイスの方角や傾き(ジャイロセンサー)

オフライン・ストレージ系API

Web Storage

  • ブラウザ側でデータを保存する機能
  • Key-Value形式
  • 文字列のみ保存可能
  • JavaScriptでデータを操作
sessionStorageブラウザ閉じるとデータ消失
localStorageブラウザ閉じてもデータを保持

Indexed Database API

  • ブラウザ側でデータを保存する機能
  • Key-Value形式
  • JavaScriptを使用
  • 高速な検索や、トランザクションでデータの整合性を維持
  • 文字列、ファイル、blobBinary Large OBject)などを格納できる
  • ブラウザを閉じても明示的に破棄しない限りデータを保持
CookieWeb StorageIndexed
Datebase
Web SQL
(参考)
4KBブラウザによるブラウザによるブラウザによる
保存期間は有限保存期限は無制限
/セッション
保存期限は無制限保存期限は無制限
文字列文字列ネイティブ/
オブジェクト
ネイティブ/
オブジェクト
非同期でない非同期でない
Key-Value形式
非同期
Key-Value形式
非同期
セッションで
使用される
シンプルで
大容量保存可
実装が進んでいる非推奨

通信系API

Web Workers

Webコンテンツのスクリプトをバックグラウンドで実行するための手段

Service Workers

  • ブラウザがWebページとは別バックグラウンドでスクリプトを実行
  • リソースをキャッシュしてオフラインで利用可能

Push API

  • プッシュ通知を受信するだけ
  • fetchを利用し通知の表示、メッセージ本体の受信
  • Service Workersアプリケーション起動不要
  • メッセージをサーバに問い合わせにはfetchが必要

fetch

  • 検索結果から1件抜き出す処理
  • リソースを非同期で取得
  • サーバに問い合わせ

XMLHttpRequest

  • JavascriptHTTP通信をする
  • Webサーバと非同期通信全体を更新せずに必要なデータを更新)を行うAPI
  • Ajaxで利用される

XHTML

  • 空要素 → 終了タグつける開始タグの閉じを「/>」
  • html要素の開始タグにXHTML用の名前空間を指定

Ajax

  • Webブラウザ内非同期通信動的なページ処理
  • Asynchronous(非同期) JavaScript + XML
  • XMLHttpRequestJavaScriptを用いて使用(実際にはjQueryが一般的)

Server-Sent Events

  • サーバからのプッシュ送信を実現するAPI
  • 非同期でサーバからブラウザにデータを送信
  • MINEタイプはtext-event-stream

WebSocket API

  • Webサーバとクライアントで双方向通信(サーバ側からも能動的にメッセージを送信)を可能にするJavaScriptのAPI
  • 例)チャット
  • テキストデータ、バイナリデータ OK

<WebSocket APIのイベント>

openブラウザとサーバ間の接続が確立されるまでは非同期、接続が確立するとopenイベントが発生
closeブラウザとサーバ間が切断
errorブラウザとサーバ間でエラー発生
messageメッセージを受信した

WebRTC

  • Web Real-Time Communication
  • ウェブブラウザ
  • 映像や音声
  • P2P(Peer to Peer) … デバイス間で対等(ブラウザ⇄サーバでなくブラウザ同士)で通信
レスポンシブ、マルチデバイス

Mobile First

  • Luke Wroblewski氏が提唱
  • 制約が大きいモバイルサイトにおいての利用を優先的に設計

メディアクエリ

メディアクエリによって、条件にあわせてCSSを適用するかどうか指示を出すことができます。

論理積and
論理和,orは使用しない
■link要素でCSSを読み込む際に、media属性を使用
<link rel="stylesheet" media="screen and (max-width: 480px)" href="style.css">

■CSSに条件を記述
@media screen and (max-width: 480px) {
/* CSSを記述する */
}

■「@import」で外部スタイルシートを読み込み時デバイスの条件を記載
@import "style.css" screen;
  • not … 条件が逆に
  • or … 使用不可

メディア型

all全ての機器(デフォルト)
screenPC、スマートデバイスの画面
printプリンタ
projectionプロフェクタ
tvテレビ
handheld携帯用機器
tty文字幅が固定の端末(テラタイプ、ターミナル
speechスピーチ、シンセサイザー
braille点字ディスプレイ
embossed点字プリンタ

メディア特性

width
min-width
max-width
ビューポートの幅
整数(負の値は×)
heigh
min-heigh
max-heigh
ビューポートの高さ
整数(負の値は×)
device-width
min-device-width
max-device-width
デバイスの幅
整数(負の値は×)
device-heigh
min-device-heigh
max-device-heigh
デバイスの高さ
整数(負の値は×)
aspect-ratio
min-aspect-ratio
max-aspect-ratio
表示領域のアスペクト比
水平/垂直の整数で指定
device-aspect-ratio
min-device-aspect-ratio
max-device-aspect-ratio
デバイスのアスペクト比
水平/垂直の整数で指定
resolution
min-resolution
max-resolution
デバイスの解像度(最小最大)
整数+dpidpcmdppx
orientationlandscape:横置き
portrait:縦置き
color
min-color
max-color
デバイスの色数
整数(負の値は×)
monochrome
min-monochrome
max-monochrome
デバイスがモノクロ階調数。
モノクロでない場合は0。

整数(負の値は×)
scanテレビの時のスキャン方式

Web Clip

  • ウェブサイトへのショートカット
  • rel属性に「apple-touch-icon
  • rel属性に「apple-touch-icon-precomposed」 … 自動装飾OFF
  • href属性で画像を指定
  • iOSではsizes属性でサイズ別に指定可能

ビューポート

  • ブラウザの表示領域
  • HTMLのmeta要素から設定
<meta name="viewport" content="width=device-width">content="width=device-width"と記述することで、
 表示領域の幅を端末画面の幅に合わせられる

フルードグリッド

  • グリッド幅、グリッドの数を画面サイズに合せて変化
  • メディアクエリを使用
  • JavaScript使用する場合あり

フルードイメージ

  • img要素でwidth、max-widthパーセントなど相対値で設定
  • height → auto 既に縦横幅を指定してある画像も縦横比維持
  • max-heightプロパティは使用不可
    (いくつかのWebブラウザで、ウインドウ幅に応じて高さが変化しない)
■スタイル設定
img {
    max-width:100%;
    height:auto; … 縦横比を保持
 }

CSSスプライト

  • 複数の画像を連結、1つにまとめる
  • background-imagebackground-positionプロパティで設定
  • リクエスト回数を減らす → ページ速度の向上、通信が不安定でも表示
  • 修正が複雑

高解像度画面

  • アイコンにSVG、Webフォントを使うことで、拡大によるぼやけを防ぐ
  • ピクセル密度2 … 4デバイスピクセルが1CSSピクセル

Retinaディスプレイ

  • 4デバイスピクセルが1CSSピクセル

ファビコン

  • Favorite Icon
  • ブックマークやタブのアイコン
<link rel="icon" href="/favicon.png">
<link rel="shortcut icon" href="/favicon.png">

ショートカットアイコン、Webクリップ

  • Webサイトへのショートカットをホーム画面上に追加
<link rel="apple-touch-icon" href="">

※OSによるハイライト、影を避けたい場合
rel属性にapple-touch-icon-precomposedを指定

スタンドアロンモード

  • iOS限定アドレスバーやツールバーを消す
<meta name="apple-mobile-web-app-capable" content="yes">

format-detection

  • 勝手にリンクされないようにmetaタグで制御
自動でハイパーリンクとして認識する機能を無効化
<meta name="format-detection" content="telephone=no, email=no, address=no">
CSS

CSSの基礎知識

Contents

セレクタ

セレクタ { プロパティ名 : 値 ;}

link要素

<!doctype html>
<html>
<head>
.....
<link rel="stylesheet" href="style.css">
</head>
.....

style要素

<!doctype html>
<html>
<head>
.....
<style>
p { color: red; }
</style>
</head>
.....

style属性

.....
</head>
<body>
<p style="color: red;">
.....
</p>

@import

  • @import “style.css“;(シングルクオーテーションでも省略も可能)
  • @import url(“style.css“);(シングルクオーテーションでも省略も可能)
  • @import “style.css” screen, print;

単位

em親要素のフォントサイズを1とする
remhtml要素のフォントサイズを1とする root em 指定していないデフォルトは16px
ex要素のフォントのx-height(小文字xとほぼ同じ)を1
ch要素のフォント0の幅を1
pxピクセル、1/96インチ
ptポイント、1/72インチ
pcパイカ、12ポイント
inインチ、2.54センチ

単位の使い分け

emは親要素のフォントサイズを参照するのでletter-spacing疑似要素の間隔に使い、絶対的な値はborderでそれ以外はremにすることで、レスポンシブデザインに対応するスタイルにできます。

  • em … letter-spacingや疑似要素との間隔
  • px … border等可変でない値

セレクタ

属性セレクタ

属性セレクタ対象
[属性名]属性名の属性が指定されている(属性値は何でも良い)
[属性名=”属性値”]属性値全体が一致
[属性名~=”属性値”]スペース区切りの値どれかと一致
[属性名=”属性値”]ハイフン区切りの前半が一致
[属性名^=”属性値の始め”]属性値の始めで始まる
[属性名$=”属性値の終わり”]属性値の終わりで終わる
[属性名*=”属性値の一部”]属性値の一部を含む

擬似クラス

  • 擬似要素はセレクタの最後にのみ配置可能
  • :擬似クラス コロンは1つ
  • ::疑似要素 コロンを2つ
属性セレクタ対象
:nth-child(式)先頭からn個目の要素から(式)おき
:nth-last-child(式)最後からn個目の要素から(式)おき
:nth-of-type(式)先頭からn個目の要素から(式)おき
(指定要素と同じ)
:nth-last-of-type(式)最後からn個目の要素から(式)おき
(指定要素と同じ)
:first-child子要素の中で最初の要素
:last-child子要素の中で最後の要素
:first-of-type子要素の中で最初の要素
(指定要素と同じ)
:last-of-type子要素の中で最後の要素
(指定要素と同じ)
:only-child唯一の子要素
:only-of-type唯一の子要素
(指定要素と同じ)

属性セレクタ

  • p[class=”abc”]
    完全一致
  • p[class|=”abc”]
    「-」(ハイフン)区切りの属性値の前半が一致
  • p[class~=”abc”]
    複数の属性名のうち一つが一致
  • p[class^=”abc”]
    属性値で始まる
  • p[class$=”abc”]
    属性値で終わる
  • [p*=”abc”]
    「属性値の一部」の文字列を含む

擬似要素

セレクタ全体の最後部に1つだけしかつけることができない

擬似要素適用先
::first-line1行目
::first-letter1文字目
::before先頭にコンテンツ追加
::after最後にコンテンツ追加

結合子

ベンダープレフィックス

  • 草案段階の際
  • プロパティの先頭に付けます。
ベンダープレフィックスブラウザ
-moz-Firefox
-ms-FireaInternet Explorer、Microsoft Edgefox
-o-Opera
-webkit-Google Chrome, Safari

背景

background

<一括指定の順番>

background: url background-position / background-size background-repeat;

background-position / background-size の記述は決まっている

liner-gradient

background: linear-gradient(red, #eee);
background: linear-gradient(to bottom, red, #eee);
background: linear-gradient(180deg, red, #eee);

背景を2色にする

background: linear-gradient(90deg, #333 0%, #333 30%, #f4f7f8 30%, #f4f7f8 100%);

背景画像にオーバーレイ(透過カラー)を重ねる方法


background: linear-gradient(rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 0.3)), url(../) center center / cover no-repeat;

hsl

object-fit

画像を様々な縦横比に対応するように整えてくれる便利なプロパティです。

cover表示エリアに余白がなくなるよう表示し、はみ出した部分はトリミングされます。
contain表示エリアをはみ出さないよう、最大の大きさで表示します。足りない部分は余白ができます。

フォント

font

  1. font-weight、font-style、font-variant(順不同、省略可
  2. font-size(省略不可)
  3. 「/」(スラッシュ)で区切る
  4. line-height(省略可)
  5. font-family(省略不可)

font-size

単位付きの数値
パーセンテージ親要素に対して指定
xx-small、x-small、small、medium、large、x-large、xx-large7種類のキーワードで指定
smaller、larger親要素に対して1段回小さい、大きい

font-familyプロパティ

  • family-nameまたはgeneric-familyの値を指定
    (※family-nameはインストールされたフォント名、@font-face{}で指定したフォント名)

font-variantプロパティ

  • スモールキャピタル(大文字を小さくした)の書体にする
  • 初期値「nomal」 → 「small-caps
  • woff、truetype、opentype、embedded-opentype、svg

line-height

  • normal … 自動的に指定、規定値は1.2
  • 単位付き数値
  • 単位なし数値 … フォントサイズ × 数値(推奨)

Webフォント

  • @font-faceで読み込む
  • インストール不要環境に依存しない
@font-face{
 font-family: mytestfont;
 src: url("fonts/testfont.woff") format("woff");
}
p{font-family: "mytestfont";}
■最初に任意のフォント、最後に総称ファミリを指定
font-family: フォントファミリ名1, フォントファミリ名2, 総称ファミリ名;

generic-family

  • 汎用フォントファミリー名
総称ファミリ名字体
serif明朝体
sans-serifゴシック体
cursive筆記体
fantasy装飾体
monospace等幅

writing-modeプロパティ

writing-modeプロパティは縦書きのプロパティに使用します。

.vertical {
 -ms-writing-mode: tb-rl;
 writing-mode: vertical-rl;
}

縦書きレイアウトのDEMO
123456789

text-shadow

p {
text-shadow: 1px 4px 8pxぼかし rgba( 0,0,0,0.4), -1px -4px 8px rgba( 255,0,0,0.4);
}

テキスト

text-decoration

関連プロパティを空白で区切って設定

  • text-decoration-line  下線・上線・取消線
  • text-decoration-style  線の種類(波線や二重線、破線)
  • text-decoration-color  色

word-break

break-all全ての文字の間で折り返し
keep-all空白以外折り返ししない(日本語は折り返さない)
normalその言語のルールに合わせる(初期値)

hyphens

manual&shy;でハイフネーション(初期値)
none一切行わない
auto言語に応じて

white-space

  • 連続する空白文字を1つの半角スペースに変換するか
  • 折り返しをどうするか
改行
ソースコード
まとめ折返し
normal×
pre××
nowrap××
pre-wrap×
pre-line

word-spacing

単語単語間隔

text-transform

テキストの大文字小文字を切り替える

uppercase半角アルファベット → 大文字
lowercase半角アルファベット → 小文字
capitalize半角アルファベット → 先頭の文字だけ大文字
none元の状態のまま
p { text-transform: capitalize;}

capitalize abc

direction

文字表記の方向

ltr左から右
rtl右から左

unicode-bidi

文字表記に関する指示、上書き

normal(初期値) UNICODEを組み込まない
embedインライン要素の場合UNICODEを組み込む
bidi-overrideUNICODE上書き

ボックス

box-sizing

content-boxpadding、borderはコンテンツのwidthとheightにを含めない(初期値)
border-boxpadding、borderはコンテンツのwidthとheightにを含める
inherit親要素継承

box-shadow

  1. 水平方向(必須)
  2. 垂直方向(必須)
  3. ぼやけかたの大きさ(省略可)
  4. 影の大きさ(省略可)
  5. 影の色(省略可)
  6. 影を内側にする(inset)(省略可)

filter: drop-shadow

filter:drop-shadow(水平方向 垂直方向 ブラー量 影色);

box-shadowとの違い

border

線の種類 太さ

width

max-width

  • 要素を親要素からはみ出さないようにする
  • max-width: 100%;にすると画面幅が画像より大きいときは画像のサイズで、小さいときは画面幅にあわせてはみ出ないようになります。
    ※画像の縦横幅が崩れたらheight: auto;

margin

  • 値が1つ … 上下左右
  • 値が2つ … 上下 左右
  • 値が3つ …  左右
  • 値が4つ … 

padding

display: flex;

row左から右への横並び
column上から下
row-reverserowの逆
column-reversecolumnの逆
<flex-directionプロパティ>

flex-shrink

flexアイテムの縮小率を指定するプロパティです。親要素のflexコンテナからはみ出た要素を縮小することができます。

また幅を縮めたくないときは、flex-shrink: 0;を指定します。

親要素にdisplay: flex;を指定し、子要素にflex-shrinkを指定します。

flex

flexとは、flex-growflex-shrinkflex-basisを同時に指定できるプロパティです。

flex: 1;

flex-grow: 1;flex-shrink: 1;flex-basis: 0;を同時に指定できるプロパティです。

flex-grow: 1;親要素の余っているスペースを整数で設定した比率で分配
flex-shrink: 1;親要素からはみ出たスペースを整数で設定した比率で縮める
flex-basis: 0;width、heightのように幅を初期値を設定できる
デフォルト値=autoを0で記載
https://miyattiblog.com/explanation-of-flex-property/

gapプロパティー

gapプロパティーはFlexboxおよびGridで要素間の間隔を設定できます。

display: grid;

CSS Gridで中央揃え

.sample {
background: #222;
color: #fff;
display: grid;
place-items: center;
padding: 60px;
}
gridで中央寄せ
https://developer.mozilla.org/ja/docs/Web/CSS/grid-template-columns


position

position: static; … プロパティ無し。既定値
position: relative;  親要素、または画面の左上を基準に位置を指定
position: absolute ;  親要素から top right bottom left の値によって決定 
position: fixed;
position: sticky; … 親要素から、追従する
【領域1】
sticky
【領域2】

z-index

  • 0が基準
  • 初期値はauto
  • positionプロパティにstatic以外が指定されている場合に適用
  • 後に書いたものが上に来る、擬似要素も
  • z-indexが有効なのは同一階層で

マルチカラム、フレキシブルボックス

columun-count

  • 何段組にするか
  • 初期値はauto

columun-width

columunsプロパティ

columns: カラムの幅 カラムの数;

columun-gapプロパティ

<p style="
width: 100%;
height: 160px;   /*--高さを指定--*/
column-count: 3; /*--3列--*/
column-fill: balance; /*--balanceを指定--*/
column-gap: 1px; /*--隙間--*/
line-height: 1.8;"> … </p>

この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。この文章はダミーで

columun-ruleプロパティ

columun-spanプロパティ

アニメーション

transform

擬似クラス説明
none初期値
rotate(角度)時計回りの回転
rog、rad
scale(数値,数値)・横方向、縦方向の順の倍率に拡大縮小
・値を一つ → 縦横両方適用
translate(単位付きの数値, 単位付きの数値)・右方向、下方向の順に移動を指定
・値を一つ → 右方向だけ適用
skew()x軸、y軸に沿った傾斜の角度を指定
値を一つ → x軸に沿った角度の傾斜だけ適用

transition-property

  • 効果を適用するプロパティを指定
  • 複数設定はカンマ区切り
  • 値 → プロパティ名、none、all(適用可能な全てのプロパティ、デフォルト値)

transition-duration

変化にかかる時間を指定

transition-timing-function

  • ease … ゆっくり始まり → ゆっくり終わる(デフォルト値)
  • ease-in … ゆっくり始ま → 一定速度で終わる
  • ease-out … 一定速度で始まり → ゆっくり終わる
  • ease-in-out … ゆっくり始まり → ゆっくり終わる
  • linear … 一定速度で変化

transition-delay

  • 開始する時間を遅らせる
  • 初期値0

transition

transition-delay → transition-durationの順に指定

@keyframes

.animation{
animation-name: animation;
animation-duration: 2s;
animation-iteration-count:infinite;
background: #bisque;
height: 60px;
text-align: center;
}
@keyframes animation{
0%{
width: 50%;
}
100%{
width: 100%;
}
}
  • 「0%」→「from」、「100%」→「to」が使用可能
アニメーションサンプル

animation

  • animation-name キーフレームの名前
  • animation-duration 再生時間
  • animation-timing-function 加速、減速
  • animation-delay 開始時間を遅らせる
  • animation-iteration-count 繰り返す回数
  • animation-direction 逆再生

animation-iteration-count

アニメーションの再生を繰り返す回数を指定

その他

table

プロパティ名機能
caption-sideキャプションの表示位置(top、bottom、left、right)
border-collapse罫線の間の隙間の有無
・あり→separate(デフォルト) → border-radius無効
・なし→collapse
border-spacing罫線のあいだの間隔の大きさを指定します。
empty-cells内容が空のセルの背景とボーダーを表示させるかどうか
table-layoutレイアウト方式
auto、fixed表の表示が速くなる

内容を追加するプロパティ

  • content … CSSで内容を追加
  • quotes … qようその前後につける引用符を設定
  • counter-reset … カウンタの値をリセット
  • counter-increment … カウンタの値を進める
<style media="screen">
    li {
      counter-increment: number;
    }
    li::before {
      content: counter(number);
    }
  </style>
<ul>
<li>見出し</li>
<li>見出し</li>
<li>見出し</li>
</ul>
  • 見出し
  • 見出し
  • 見出し

SMACSS

SMACSS(スマックス:Scalable and Modular Architecture for CSS)拡張可能でモジュール的なCSSの設計手法です。

CSSのルールを5種類

  1. ベース
  2. レイアウト
  3. モジュール
  4. 状態(ステート)
  5. テーマ

CSS設計

CSS設計のポイント

GoogleのエンジニアであるPhilipWalton氏が提唱しているCSSが目指す4つのゴールがあります。

  • 予測できる
    • クラス名から影響は範囲が想像できる
    • クラス名から機能・役割が創造できる
  • 再利用できる
  • 保守できる
    • 影響範囲が広すぎない
  • 拡張できる
    • 詳細度が高すぎない
    • HTMLに依存しない

レイアウトに関する記述

以下のようなプロパティーはモジュールクラス自体に直接設定せず、別のレイアウトグループのクラスにてスタイリングすることで、使い回しが可能になります。

  • position
  • zindex
  • top/right/bottom/left
  • float
  • width
  • margin

例えばレイアウトに関するスタイリングをするために以下のようにクラスを設定する方法があります。

.ly_cont {
 width: 1200px;
 padding: 0 16px;
 margin-right: auto;
 margin-left: auto;
}

※SMACSSではレイアウトに関するクラスに接頭辞にl-をつけます。

HTMLに依存しない

HTML要素名をセレクターに使用しないことで、HTMLに依存しない設計が可能です。

これにより何かの事情によりpタグからdivタグに変更しなければならない時に、その影響を考える必要がありません。

SMACSSのモジュールルール

モジュール(見出し、ボタン、カード…)は別のレイアウトに埋め込んでも見た目が崩れたりしないように使用できることが求められます。

影響範囲を広くしすぎない

正しく計算した上で範囲を広く設定することは問題ありませんが、意味もなく範囲を広くしてしまうとそれを打ち消すコードの記述やレイアウト崩れが起きる可能性があります。以下の点がポイントになります。

  • 影響範囲を絞る
    • (例 … 子孫セレクタでなく子セレクタで指定するSMACSS推奨
  • 影響範囲が広い範囲の場合、最小限のスタイリングにとどめる

詳細度を高くしすぎない

必要以上に詳細度を高くすると以下のデメリットがあります。

  • コードが見づらい
  • 上書き、打ち消すのが難しい

詳細度を均一に保つ

<a class="button button_primary" href="#">ボタン</a>

.button.button_primary {…} 詳細度が高い×
.button_primary {…} 詳細度が均一○(BEM)

クラス名から機能・役割が創造できる

汎用的に使用可能な単語

  • __wrapper
  • __inner
  • __header
  • __body

クラス名のつけ方

  • main … 主要な
  • faq … よくある質問
  • title … (サイト、セクションの)タイトル、見出し
  • heading … 見出し
  • lead … 見出しの補足
  • wrapper … 容器(レイアウト)
  • wrapper … 容器(レイアウト)
  • container … 容器(全体的な囲むもの)
  • desc … 概要(description)
  • detail … 詳細
  • wrapper … 概要(description)
  • desc … 概要(description)
  • feature … 特徴

BEMの基本規則

BEMではBlock、Element(Blockの外では独立で使用できない)という構成でクラス名をつけます。

<!-- Block -->
<ul class="menu">
    <!-- Element エレメントはブロックを構成する要素-->
    <li class="menu__item"><a href="" class="menu__link">アイテム1</a></li>
    <li class="menu__item"><a href="" class="menu__link">アイテム2</a></li>
    <!-- Modifier モディファイアはエレメントに対するオプション-->
    <li class="menu__item menu__item__actived"><a href="" class="menu__link">アイテム3</a></li>
</ul>

各名前はアンダースコア2つでつなぎます。

BEMの命名規則

  • ElementとModifierにはBlockの名前を含める
  • Element、Modifier、Blockに2つ以上の単語が含まれる場合、ハイフンで繋ぐ

CSSよく使う記述

https://ntorelabo.com/?p=8973

カスタムプロパティの定義

@charset "UTF-8";

:root {
    --primary-color: #45CCC4;
    --red: #EB4E45;
    --blue: #0158A8;
    --bg-color: #ECFCFB;
    --text-color: #333;
    --breakpoint-sm: 576px;
}

@charset “UTF-8”;

この表記によりhtmlやcssがどの文字コードで書かれているかをブラウザが判断(文字化けを防ぐ)
→現在はブラウザ自動で判断することから、不要論もあります。

画像の大きさの最適化

img {
    max-width: 100%;
    height: auto;
    vertical-align: top;
}
※親要素より横幅が大きい場合のみ縮小され、
高さも自動で縮小され、歪みません

※画像の上下に余白(line-height分の余白)ができない
要素(HTMLの書式)

HTMLの基礎知識

文字実体参照

数値文字参照

タグ

開始タグも閉じタグも省略できるタグ

htmlheadbodytbodycolgroup

※「要素が存在しない」のではなく、ブラウザ側で付け足される

空要素

「/」「>」の間に空白文字入れられない → 文法エラー

グローバル属性

全要素に指定できる

属性説明
accesskeyショートカットを生成する
class
contenteditableユーザによる編集が可能か
contextmenuコンテキストメニュー
data-*カスタムデータ属性。
dir書字方向
draggableドラッグ可能か
ドラッグ&ドロップ API 
hidden関連性があるか
id
lang言語コード
nonceコンテンツセキュリティポリシーのためのワンタイムトークンを示す属性
spellcheckスペルチェックをするか
styleスタイルシート
title補足情報

論理属性

  • 属性名だけで指定できる
  • 属性を指定するとtrue
  • 値を指定する場合「属性名=””」「属性名=”属性名”」

DOCTYPE宣言

  • HTML5では、DOCTYPE宣言は1種類<!DOCTYPE html>
  • srcdoc属性に指定するHTML文書では省略可能 → 宣言をせずとも正確に表示される

全体構造メタ情報

title要素

  • head要素の中で使用
  • 1つのhtml文書の中で1つまで
  • なくても良いケースあり
  • 開始終了タグの省略不可

head要素

  • 通常のHTMLではtitle要素を1つ入れる必要がある(条件により省略可能)

meta要素

属性
charset・文字のエンコーディング(文字に割り当てられた数字)
文書の先頭から1024バイト以内に指定する<title>より前
・HTML5から追加
contentメタ情報の値
http-equivプラグマディレクティブ(HTMLの状態や挙動を指示)
nameメタデータの名前

HTML基本タグ

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  
</body>
</html>

link要素

  • <link rel=”stylesheet” href=”/style.css” type=”text/css”>
  • <link rel=”canonical” href=”https://〇〇.com/”>

base要素

  • 相対URLの基準相対パスの基準位置
  • head要素中、HTML文書に対して1つ記述
  • href属性target属性を指定

a要素

  • href=”URL” … リンク先URL
    tel:xxxxxxxxxx 電話発信リンク
  • target=”ブラウジング・コンテキスト” … 表示するウィンドウ、タブ
  • rel=” “ … 関係
  • type=”MIMEタイプ”
  • hreflang=”言語コード” … リンク先言語
  • download=”ファイル名” … href属性で指定したダウンロード
  • 要素にはインタラクティブコンテンツ(interactive content)は入れられない
    • a要素
    • label要素
    • iframe要素
    • tabindex属性を指定している要素
target属性値開き方
_blank新規ウィンドウ
_self現在のウィンドウ
_parent親ウィンドウ
_topウィンドウ全体
ウィンドウ名指定したウィンドウ名
フレーム名指定したフレーム名

セクションと基本構造

コンテンツ・モデル

各要素の中身を定義

カテゴリ 説明
フローコンテンツ ブラウザに表示する
フレージングコンテンツ テキストを構成
セクショニングコンテンツ セクションを構成
ヘディングコンテンツ 見出しを構成
組込コンテンツ 画像や動画を埋め込む要素
フレージングコンテンツ テキストを構成
インタラクティブコンテンツ ユーザが操作できる
メタデータコンテンツ ページの情報を表す

トランスペアレント

  • 親要素のコンテンツモデルを継承
  • a、audio、video、canvas、ins、del、map、noscript(body要素内)、object、slot

セクショニングコンテンツ要素

セクションの範囲を定義

article雑誌や新聞の記事、ブログの投稿
aside広告やサイドバー、メインコンテンツと関連性の薄いコンテンツ
nav
section意味のもつまとまりを表す

セクショニング・ルート要素

  • 2022年7月(?)廃止
    • body
    • blockquote
    • details
    • fieldset
    • figure
    • td
  • ドキュメント全体から独立した独自の階層構造

main属性

  • 複数配置可能だが、同時に表示はできない(hidden属性が必要)
  • html、body、div、formのみmain属性を含むことができる

address属性

  • 一番近いarticle要素か、body要素の問い合わせ先を示す
  • 内容に入れれるのは問い合わせ先のみ

テキスト

b要素

  • 以前は太字
  • 製品名キーワードリード文
  • 他のものと区別

em要素

  • アクセントをつける

i要素

  • 以前はイタリック体
  • 異なる性質の部分
  • 学名専門用語外国語の慣用句

s要素

  • 以前は取消線(strike-through)

mark要素

  • 検索結果
  • 注目してもらいたい部分

hr要素

  • もともとは横罫線
  • 段落レベルでの主題の変わり目

small要素

  • 付帯情報
  • 以前はテキストを小さく表す

cite要素

  • 作品名
  • 引用文を含めれない

q要素

  • その内容が行内の引用であることを意味する
  • 長文の引用 … blockquote要素を使用

blockquote要素

<blockquote>
<p>吾輩は猫である。名前はまだない。…</p>
</blockquote>
<p><cite>吾輩は猫である</cite>より引用</p>

吾輩は猫である。名前はまだない。…

吾輩は猫であるより引用

u要素

  • 以前は下線(underline)
  • 中国語の固有名詞、スペルミス

bdi要素

bpi要素のテキストは周囲に影響を及ぼさない

ins要素

  • 追加した部分
  • 一般的なブラウザでは下線

del要素

  • 削除した部分
  • 一般的なブラウザでは打ち消し線
del要素 ins要素

その他の要素

li要素

list-style-type
  • list-style-imageが優先される
none記号を無し
disc塗り潰し丸(初期値)
circle白抜き丸
square四角
decimal数字
lower-roman
upper-roman
ローマ字(子文字/大文字)
lower-latin
upper-latin
アルファベット(子文字/大文字)
hiragana
katakana
平仮名、カタガナ

menu要素

  • ツールバー、操作メニュー
  • li要素を使用
<menu>
  <li>項目1</li>
  <li>項目2</li>
  <li>項目3</li>
</menu>
  • 項目1
  • 項目2
  • 項目3
  • dl要素

    • description list
    • dt要素(用語)」「dd要素(説明)」
    • 0以上のdt要素、1つ以上のdd要素
    <dl>
    <dt>作者</dt>
    <dd>松本</dd>
    <dd>渡辺</dd>
    </dl>
    作者
    松本
    渡辺

    dfn要素

    • definition list(定義リスト)
    • 「用語の定義」に使用

    <dl>
    <dt><dfn>プロフェッショナル</dfn></dt>
    <dd>技術と知識を持つ</dd>
    </dl>
    プロフェッショナル
    技術と知識を持つ

    ruby要素要素

    • <rt> Ruby Text
    • <rp> Ruby Parentheses テキストを囲む記号を指定
    • <rb> ルビをふる対象、漢字を分割してrt要素と指定する場合に使用
    • <rtc> rt要素をグループ化
    <ruby>
    要<rt>よう</rt>
    素<rt>そ</rt>
    </ruby>
    よう

    table要素

    • border要素は指定できない

    <table要素内の配置順>

    1. caption要素0か1個
    2. colgroup要素(0か1個
    3. thead(0か1個
    4. tbody0個以上)要素またはtr要素1個以上
    5. tfoot要素0か1個
    <table border="">
      <tr> … 横1列
        <th>見出し内容A</th> … 見出し
        <th>見出し内容B</th>
      </tr>
      <tr>
        <td>データA</td> … 表の中の1つ1つの項目
        <td>データB</td>
      </tr>
    </table>
    見出し内容A 見出し内容B
    データA データB

    thead要素

    thead、tbody、tfoot … 行をグループ化

    <th、theadの使い分け>

    <table border="">
    <thead>
    <tr>
    <th>氏名</th>
    <th>メールアドレス</th>
    <th>電話番号</th>
    </tr>
    </thead>
    <tbody>
    <tr>
    <td>〇〇〇〇</td>
    <td>xxxx@xxx.xxx</td>
    <td>0x0-xxxx-xxxx</td>
    </tr>
    </tbody>
    </table>
    氏名 メールアドレス 電話番号
    〇〇〇〇 xxxx@xxx.xxx 0x0-xxxx-xxxx

    figure要素

    figcaption要素

    figure要素内の一番前か一番後ろに配置

    details要素

    • open属性(論理属性)を指定すると常に見出し(summary要素)が表示される
    • summary要素は最初の子要素で指定する
    <hr>
    <details>
      <summary>概要</summary>
      コンテンツ詳細内容
    </details>
    <hr>
    
    <hr>
    <details>
      <summary>概要</summary>
      コンテンツ詳細内容
    </details>
    <hr>
    <br>
    <hr>
    <details>
      summary省略するとsummary省略するとsummary省略するとsummary省略するとsummary省略すると
    </details>
    <hr>

    概要 コンテンツ詳細内容



    summary省略するとsummary省略するとsummary省略するとsummary省略するとsummary省略すると

    script要素

    • HTML内にスクリプトまたはデータブロックを埋め込む
    • type=”MIMEタイプ” … スクリプトの種類(デフォルト値は「text/javascript
    • async=”論理属性”defer=”論理属性”で同時に指定した場合は、asyncに対応しているブラウザではasyncを、非対応のブラウザではdefer
    属性
    src外部スクリプトのアドレス
    <script src=”〇〇.js”></script>
    typeMINEタイプ
    asyncスクリプトを非同期で読み込み → 読み込み完了後すぐ実行
    deferスクリプトを非同期で読み込み → ページ全体の解析後実行 

    データブロックscriptタグでJavaScripでないもの)を指定する場合type属性は必須で、src属性は使用できない

    noscript要素

    • scriptが無効のときに読み込む
    • HTML構文でのみ使用可能、XML構文では使えない

    WAI-ARIA

    • Web Accessibility Initiative – Accessible Rich Internet Applications
    • role属性役割)とaria属性状態・性質)を定義
    • ブラウザの読み上げ機能を使った場合などに使用
    • banner … 大見出し、タイトル
    • main … メインコンテンツ
    • navigation … ナビゲーション
    • search … 検索

    正規表現

    正規表現説明マッチする該当
    [abc]abcのうち1文字「a」「b」「c」のいずれか
    [^abc]abc以外の1文字「d」など
    [A-Za-z]AからZ、aからzのうちの1文字「d」など
    基礎理論、技術要素(データベース)、ネットワーク

    スタック

    最後に入力したデータを最初に出力する

    キュー

    最初に入力したデータを最初に出力する

    関係データベース

    関係演算

    選択

    必要な行だけを抜き出す

    射影

    データの中から、必要な列だけを抜き出す

    結合

    同じ列を基準に2つの表をくっつける

    正規化

    データに矛盾が発生しにくい

    • レコードの長さを揃える
    • 部分関数従属しているレコードの切り出し

    データとデータの間の関連を示す

    E-R図

    DFD

    特性要因図

    フィッシュボーン図

    管理図

    製品の重量のばらつきを分析

    上方管理限界、下方管理言外

    正規分布

    平均値を中心に左右対象

    バスタブ曲線

    ポアソン分布

    • 滅多に起こらない出来事が任意の時間当たりに起こる回数
    • 発生確率は一定

    データクレンジング

    データの品質を高め、精度を上げる

    レプリケーション

    常に最新の状態でバックアップを保存

    DBMS

    • データベース管理システム(database management system)
    • データの検索や更新
    • データ構造の定義
    • トランザクション管理 …  複数利用者の同時処理において一貫性を保持
    • アクセス制御

    キャリアアグリゲーション

    周波数帯の異なる電波を集約

    プロキシサーバ

    • インターネットへのアクセスを代理で行う
    • 匿名性を確保
    • URLフィルタリング
    • キャッシュ機能

    WPA

    • Wi-Fi Protected Access(無線LAN暗号化方式)
    • WPA2はAES(Advanced Encryption Standard)共通鍵暗号方式を利用

    ESSID

    • 無線LANのネットワークを識別するためのID
    • 最大32文字の英数字

    MACアドレスフィルタリング

    • 無線LANのセキュリティ対策

    BLE

    • 近距離無線通信規格(Bluetooth Low Energy
    • 低消費電力
    • 低速

    ZigBee

    • 近距離無線通信規格
    • 多数のセンサを使用
    セキュリティ

    情報セキュリティ

    • 機密性:許可された人だけが情報にアクセス可能
    • 完全性:情報や処理方法が正確かつ完全
    • 可用性:必要なときに情報にアクセス可能

    追加

    • 真正性:本人だと認証
    • 責任追跡性:ログ情報の追跡
    • 信頼性:処理が正しく確実に行われるか
    • 否認防止:契約などの処理を後から否認できないようにする措置
    https://ntorelabo.com/2023/02/04/4157/#co-index-0

    公開鍵暗号方式

    <暗号化:受信者がペアで作る>

    <デジタル著名:送信者がペアで作る>

    S/MIME

    電子メールの送受信の際公開鍵暗号方式やディジタル署名によってセキュリティを強化

    SMTP

    メール送信転送プロトコル

    POP3

    メールサーバから取り出すプロトコル

    IMAP

    • POP3 … ローカルにダウンロード
    • IMAP … メールサーバーを直接管理

    TPM

    • Trusted Platform Module
    • セキュリティ機能を持つチップ

    ハッシュ関数

    • ハッシュ値から元のデータを特定するのは、ほぼ無理
    • 元のデータが同じならハッシュ値も同じ
    • メッセージダイジェストの長さは一定

    MITB攻撃

    MITB(Man In The Browser)攻撃とは、不正な動作を起こすように作成したマルウェアに感染させ盗聴や改ざんをする攻撃です。

    SQLインジェクション

    SQL文を利用しサーバ内のデータを不正に取得、削除する攻撃方法

    ソーシャルエンジニアリング

    人間の心理的な隙や行動のミス利用

    ブルートフォース攻撃

    ブルートフォースアタック(総当たり攻撃)は、文字の組合せを順に入力する方法

    パスワードリスト攻撃

    別のサイトから流出したパスワードを利用しログイン

    クリプトジャッキング

    所有者の知らない間に暗号資産のマイニング(採掘)を不正に行う

    クロスサイトスクリプティング

    第3者が埋め込んだスクリプトを利用者に起動させる

    DoS攻撃

    サーバの処理能力を超える大量の通信を送りつける

    DDoS攻撃

    • 分散型DDoS攻撃

    RAT

    • Remote Administration Tool
    • 遠隔操作のよって重要情報を不正に入手

    サイバーセキュリティ基本法

    • 目的
    • 定義
    • 基本理念
    • 国の責務
    • 地方公共団体の責務
    • 重要社会基盤事業者の責務
    • サイバー関連事業者その他の事業者の責務
    • 教育研究機関の責務
    • 国民の努力
    • 法制上の措置等
    • 行政組織の整備等

    CSIRT

    • Computer Security Incident Response Team
    • セキュリティ事故、インシデント対応
    • 政府や企業に設置

    J-CRAT

    • Cyber Rescue and Advice Team against targeted attack of Japan
    • 標的型サイバー攻撃に対応

    デジタルフォンレンジックス

    コンピュータ犯罪に対する科学的捜査

    BCP

    • Business Continuity Plan(事業継続計画
    • バックアップ、発電機

    RFID

    • Radio Frequency Identification
    • 通信距離は数cm~数m程度
    • ICチップを無線通信装置を使って、情報の読み書きをする
    • Suica

    NFC

    • Near Field Communication
    • 通信距離は10cm
    • ICカード、スマートフォン
    • NFCはRFIDに属する技術

    PCI DSS

    • Payment Card Industry Data Security Standard
    • クレジットカードの国際的なセキュリティ基準
    【ITパスポート】【基本情報】システム、戦略開発技術

    リスクマネジメント

    リスクマネジメントのプロセス

    1. コミュニケーション及び協議
    2. 適用範囲,状況及び基準
    3. リスクアセスメント
      • リスク特定 … リスクを洗い出し
      • リスク分析 … 発生頻度・確率などを分析、被害を検討
      • リスク評価 … 受容可能か判断
    4. リスク対応
    5. モニタリング及びレビュー
    6. 記録作成及び報告

    対処方法

    • リスク回避:リスクの発生原因を元から絶ったり、別の手段に変更して、リスクの発生を防ぎます。
    • リスク移転リスク共有リスク転嫁:情報システムの運用を他社に依頼したり、保険に加入するなどして、リスク発生時の損失を他者に肩代わりさせます。
    • リスク低減、リスク軽減
      代替のシステムを用意するなどし、リスクの発生率を減らします 
    • リスク保有リスク受容:リスク対策費用のほうが大きくなる場合、リスク対策を行わない

    ITIL

    • ITIL(Information Technology Infrastructure Library)とは、
    • ITSM(ITサービスマネジメント)のベストプラクティス

    解決プロセス

    インシデント管理

    • インシデント発生時に、応急処置
    • チャットボット

    問題管理

    インシデントの根本的解決

    総合的制御プロセス

    構成管理

    サービスを体系化

    変更管理

    変更が与える影響をを考慮してリリースを承認

    リリース管理

    変更管理プロセスで承認された変更作業を行うスケジュール、手順を管理して実装

    RCM

    • リスクコントロールマトリクス
    • リスクの低減の程度を評価

    RPA

    • RPA(Robotic Process Automation)
    • 人がしていた、定型的な事務作業のソフトウェアによって自動化

    WBS

    コスト見積もり、スケジュール作成を行えるレベルまで要素分解

    マトリックス組織

    技能部門と事業を遂行する部門、両方に所属


    EA

    • エンタープライズアーキテクチャ
    • 企業構造の計画
    • ギャップ分析で理想との差を埋める

    CAD

    • Computer Aided Design
    • コンピュータ支援設計
    • コンピュータで設計、作図
    • データの管理や共有、修正、再利用

    CAM

    • Computer Aided Manufacturing
    • コンピュータ支援による製造

    SLA

    • SLA(Service Level Agreement:サービスレベル契約
    • サービスの提供者がサービスの品質を保証する契約
    • サービス提供者とその利用者との間で交わされる

    SLM

    • SLM(Service Level Management:サービスレベル管理)
    • SLAに基づいて、サービスの品質を継続的・定期的に点検・検証

    RFI

    • 情報提供依頼書(Request for Information
    • ベンダの技術を情報収集

    RFP

    • RFP(Request For Proposal:提案依頼書
    • システムの発注元の企業が開発ベンダに提出される文書
    • システムの概要や調達条件等を明示

    NDA

    • NDA(Non-Disclosure Agreement:秘密保持契約
    • 機密情報を取引先に公開する際に、目的以外で使用や漏洩したりすることを防ぐための契約

    SaaS

    ソフトウェアライフサイクルプロセス

    ソフトウェアライフサイクルプロセスとは、企画、要件定義、開発、運用、保守のそれぞれのプロセスについて、各プロセスで行うべきことをまとめたガイドラインです。

    • 企画プロセス:システム化方針を査定し、システム化計画を作成。開発順序や概算コスト、費用対効果やリスク、納期
    • 要件定義:業務上実現すべき性能や、機能などを明確にし、業務要件を定義
    • 開発
      • システム開発:要件定義、方式設計、結合、適格性確認
      • ソフトウェア実装:要件定義、方式設計、構築、結合、適格性確認
    • 運用
    • 保守

    結合テスト

    モジュールをつなげてテスト

    システムテスト

    定めた性能をチェック

    受入れテスト

    • 仕様書の内容を満たしているかチェック
    • 利用者主体

    回帰テスト

    • リグレッションテスト
    • 修正した時、修正箇所以外に問題が発生していないかテスト

    SoE

    • System of Engagement
    • 企業とユーザをどう繋ぐかを重視したシステム

    SoR

    • System of Record
    • 企業内の情報を安全に運用管理することを重視したシステム

    アジャイル開発

    ソフトウェア開発プロセスのプログラミングやテストを重視し、要件定義やシステム設計を柔軟に見直しながら進めていく手法です。

    イテレーション

    • アジャイル開発で繰り返す工程の単位
    • 繰り返すことで、システムの完成度を高めます。

    XP

    • エクストリーム・プログラミング
    • ソフトウェア品質を向上させ、変化する顧客の要求への対応力を高める
    • ペアプログラミングリファクタリング推奨
    • 変更や削除の勇気

    参考URL

    https://ja.wikipedia.org/wiki/%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%88%E3%83%AA%E3%83%BC%E3%83%A0%E3%83%BB%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0
    ペアプログラミング

    二人1組、コーディングとレビュー

    リファクタリング

    • 内部構造をすっきり
    • メンテナンス性向上
    • 外から見て影響がないように作業

    スクラム

    • アジャイル開発の手法の一つ
    • 3つのロール
      • プロダクトオーナ
      • 開発チーム
      • スクラムマスタ
    • 5つのイベント
      • スプリント
      • スプリント計画
      • デイリースクラム
      • スプリントレビュー
      • スプリントレトロスペクティブ
    • 3つの作成物
      • スプリントバックログ
      • プロダクトバックログ
      • インクリメント

    コンカレントエンジニアリング

    各プロセスを並行して進める

    リバースエンジニアリング

    既存のシステムを解析 → 設計

    オブジェクト指向

    対象物(オブジェクト)役割(関係性)を定義し、システムを作る

    データと操作手順をカプセル化(一体化)

    クラス

    機能、役割ごとにプログラムをまとめる

    継承

    下位のクラスが上位の特性を受け継ぐ

    UML

    オブジェクト指向型のシステム開発の記法

    • 構造を表現: クラス図
    • 振る舞いを表現: シーケンス図

    クラス図

    アクティビティ図

    親和図法

    似たものをグループにまとめて問題解決

    PMBOK

    • プロジェクト管理の手法をまとめたもの
    • 10種類の知識エリア
    • プロジェクト統合マネジメント
      • プロジェクト検証
    • プロジェクト・スコープ・マネジメント
      • プロジェクトの成果物と作業の過不足を管理
    • プロジェクト・スケジュール・マネジメント
    • プロジェクト・コスト・マネジメント
    • プロジェクト品質マネジメント
      • 品質を保つ
    • プロジェクト資源マネジメント
    • プロジェクト・コミュニケーション・マネジメント
    • プロジェクト・リスク・マネジメント
    • プロジェクト調達マネジメント
    • プロジェクト・ステークホルダー・マネジメント

    プロジェクト検証

    • 初めに作る
    • プロジェクト統合マネジメントでつくる
    • プロジェクトの取り決め

    アローダイアグラム

    ガンチャート

    UX

    • User Experience
    • 優れたインターファイスを利用することで得られるポジティブな概念

    UI

    User Interface

    スケールアウト

    サーバの台数を増やす

    スケールアップ

    サーバをより高性能のものに変える

    IT資格

    IT資格

    資格試験名種類/分野説明
    ITパスポート国家資格
    開発者
    CCNA
    (シスコ技術者認定)
    ベンダー
    ネットワーク
    ネットワークの基礎
    セキュリティの基本
    AWS認定試験ベンダー
    クラウド
    LPIC
    (Linux技術者認定試験)
    ・LInuxのスキル証明
    ・国際基準
    LinuC
    (Linux技術者認定資格)
    ・LInuxのスキル証明
    ・日本国内向け
    HTML5
    プロフェッショナル
    認定資格試験
    プログラミング・HTML5、CSS
    ・7割の正答で合格といわれている
    ・勉強時間の目安はおよそ40時間(レベル1)
    Photoshop®クリエイター
    能力認定試験
    Photoshop・スタンダードで24時間、エキスパートで22時間程度

    AWS認定試験

    マイクロソフト認定試験

    LPIC

    LinuC

    LPI-Japanが実施している試験です。LPICが国際的な資格に対して、LinuCは日本向けの資格となってます。

    Linuxの基礎操作の知識を要求される試験で、サーバーエンジニア向けの資格です。

    Linucレベル1

    • 出題形式はCBT形式
    • 101試験と102試験、両試験に合格すること
    • 試験時間は両試験 90分
    • 60問出題
    • 受験料は両試験 16,500円
    • 有効期限 5年

    ITパスポート

    ITパスポートは基礎的なITの知識を証明できる国家資格です。

    • 未経験者向け

    ストラテジ系

    • 企業と法務
    • 経営戦略
    • システム戦略

    マネジメント系

    • システム開発プロジェクトのマネジメント

    テクノロジ系

    • コンピュータ
    • ネットワーク
    • データベース
    • セキュリティ

    合格率

    過去数年をみてみると、大体50%前後

    <合格基準、条件>

    1. 総合得点が全体の60%以上
    2. 3つの分野ごとにそれぞれ満点の30%以上
    • 出題形式はCBT形式
    • 試験時間は120分
    • 100問出題
    • 受験料は7500円

    受験の感想

    • 後で見直しできるフラグ機能があった。
    • Ping-tと情報が最新化されている参考書の学習でカバーできる。
    • 制限時間は余裕あり。40分程余った。
    • キーボード入力1問ほどあった。(参考書等に出ている内容から)
    • 試験終了のボタン押下後すぐ画面にて合否、自分の得点、合格点が発表される
    • アンケートがあった。
    • 要素、APIの問題が難しく感じた。

    基本情報技術者試験

    メリット

    • IT関係の網羅的な知識の取得

    学習期間

    IT初心者50時間(1日2時間で1ヶ月ほど)
    IT経験者200時間(1日3時間で2.2ヶ月ほど)

    試験内容

    日程

    2023年4月より、基本情報技術者試験が通年で受験が可能になりました。

    合格率

    合格率は20〜30%

    問題数時間合格点
    午前80問150分60/100点
    午後11問のうち5問選択150分60/100点

    午後の問題

    • 情報セキュリティ必須

    以下の問題から2問選択

    • ハードウェア
    • ソフトウェア
    • データベース
    • ネットワーク(難易度高い
    • ソフトウェア設計
    • プロジェクトマネジメント
    • サービスマネジメント
    • システム戦略
    • 経営戦略・企業と法務
    • データ構造/アルゴリズム必須

    以下の問題から1問選択

    • C
    • Java
    • Python
    • アセンブラ
    • 表計算ソフト(無難

    学習方法

    • 過去問道場
    • 公式サイトからPDFダウンロード(実践に近い)
    • キタミ式イラストIT塾 基本情報技術者 令和04年
    • 基本情報技術者 パーフェクトラーニング過去問題集

    試験直前

    • 計算用紙は使い切ったらもらう(計算だけでなく、表やアルゴリズムなどを手元で確認できるよう、書き写す用)
    • 時間配分の計算を(表計算、アルゴリズムは長めに想定)
    • 選択問題のチェックが抜けてないか確認を
    https://www.fe-siken.com/fekakomon.php
    https://www.ipa.go.jp/shiken/mondai-kaiotu/index.html

    Photoshop®クリエイター能力認定試験(スタンダード)

    • Photoshop®クリエイター能力認定試験にはスタンダード、エキスパート2種類のグレードがあります。
    Photoshopクリエイター能力認定試験

    試験内容

    • 受験料 … 7600円
    • 試験会場のパソコンを使用
    実技40分
    実践90分

    合格ライン

    • 実技問題の得点率65%以上で、かつ実践問題の得点率70%以上
    • 74.1%(2021年)

    日程

    随時試験全国各地、毎週実施
    試験会場検索
    ・直接会場のサイトで申し込み
    公開試験リモートの自宅受験可能

    <photoshopバージョン確認>

    • CC 2018 … Ver.19
    • CC 2019 … Ver.20
    • CC 2020 … Ver.21
    • CC 2021 … Ver.22
    • CC 2022 … Ver.23

    学習法

    • 公式サイト(サンプル問題)
    • 公式テキスト(Photoshop®クリエイター能力認定試験問題集)を周回

    <学習時間>

    • スタンダード … 24時間程
    • エキスパート … 22時間程

    受験後の感想

    • もともとphotoshopは単純な編集程度しか使っていない状態から、公式テキストでトータル20時間ほど学習しました。
    • 全問対応できた感触でした。
    • 1部は時間ギリギリで、2部は15分ほど余りました。
    • 普段使っているものでない慣れていないPC、マウスで戸惑った。
    • 問題をダウンロードし、解答をアップロードするのは若干慣れず、慎重にした。
    • 別の受験者でフリーズし強制終了している方もいたので、こまめに保存するのが良い。

    シスコ技術者認定試験

    ネットワークエンジニアの資格として有名です。

    世界最大手のネットワーク関連機器メーカーシスコシステムズが実施している試験です。
    同社の主力商品であるCiscoルータ、Catalystスイッチに関する技術力の証明となるだけでなく、基礎的なネットワーク技術(TCP/IPなど)を持つことの証明にもなります。

    メリット

    • ネットワークエンジニアとしての基本的スキルの証明ができる。
    • 就職や転職の際に有利

    試験内容

    試験番号200-301 CCNA
    問題数100〜105問程度
    試験時間120分
    受験料33,600円+税
    出題形式CBT(コンピュータ入力)方式
    受験の前提条件なし(ただし年齢制限あり)
    試験日、試験会場ピアソンVUE社のサイトで希望の日時、場所を指定可能

    出題範囲

    • 1.ネットワークの基礎(20%)
    • ネットワークアクセス(20%)
    • IPコネクティビティー(25%)
    • IPサービス(10%)
    • セキュリティーの基礎(15%)
    • 自動化とプログラマビリティ(10%)

    CBT方式

    試験会場で自宅を選べるらしいですが、もしネットワーク環境の関係等で動作がうまくいかない場合があるので、不安であれば自宅以外がいいかも知れません。

    日時も自由に予約可能です。モチベーションを高めるために、あらかじめ何ヶ月前に予約するのもありです。

    おすすめ学習法

    参考書としておすすめは「1週間でCCNAの基礎が学べる本」です。
    公式に過去問を出していません。問題を解く上でお勧めがPing-tCCNAイージスです。料金高いですがCramMediaもあります。問題を解いて解説を見たいときにはYouTubeおすすめです。

    受験後の感想

    • ルーティングテーブルを読み解く問題が多かった気がします。
    • WLCのGUI設定問題も3、4問出てきました。
    • 自分が暗記が苦手なのもありますが、割と悩むものが多かったです。暗記は問題演習と別で時間を割いてしたらよかったと思いました。
    • 時間は7分ほど余りましたが、前半必要以上に考えたりしていて、後半焦って割り切りスピード重視でしました。
    https://ntorelabo.com/?cat=5

    オラクルマスター(ORACLE MASTER)

    SQL

    資格をもっていると、任せられるという風になります。

    参考サイト

    https://qiita.com/KNR109/items/d67da9b34df2256f488b
    https://www.sikaku.gr.jp/ns/ps/introduction/
    HULFTとは

    HULFTとは

    HULFT(Harmonious Universal Link File Transfer)は、日本で最も使われているファイル転送ソフトウェアです。

    HULFTの機能

    • 同期転送と非同期転送
    • 同報配信
    • ジョブ機能
    • 圧縮転送
    • 集配完了通知
    • 制御範囲や管理権限
    • 世代や履歴の管理
    • データ形式や文字コードの変換
    • 整合性検証
    • 複数ファイルの結合
    • 間欠転送
    • その他各種機能

    企業活動、法務、経営戦略

    Contents

    貸借対照表

    資産 = 負債 + 純資産 右と左で合計は必ず一致

    流動比率

    流動比率 = 流動資産 ÷ 流動負債

    損益計算書

    損益計算書(P/L:Profit & Loss statement)

    売上高200
    売上原価150
    売上総利益50(売上高)-(売上原価)
    販売費及び
    一般管理費
    20
    営業利益30(売上総利益)-(販売費及び一般管理費)
    営業外収益6
    営業外費用14
    経常利益22(営業利益)+(営業外収益)-(営業外費用)
    特別利益0
    特別損失4
    税引前当期純利益18(経常利益)+(特別利益)-(特別損失)
    法人税,
    住民税及び事業税
    6
    当期純利益12(税引前当期純利益)-(法人税,住民税及び事業税)

    財務指標

    総資産回転率 = 売上高 ÷ 総資産
    会社の資産を有効活用しているかの指標

    自己資本比率 = 自己資本 ÷ 総資本
    総資本のうちどれだけ自己資本化の指標

    ROE

    • Return On Equity(自己資本)
    • ROE = 当期純利益 ÷ 自己資本

    ROA

    • Return On Assets
    • 総資本利益率 = 営業利益 ÷ 総資本

    流動比率 = 流動資産 ÷ 流動負債
    短期的な資金繰りをみる指標
    ・流動資産…1年以内に現金化できる資産
    ・流動負債…1年以内に返さないといけない負債

    減価償却

    固定資産を購入した場合に耐用年数を決めて、費用をその年数に分配する計算方法

    • 定額法
    • 定率法

    PDCA

    CSR

    • Corporate Social Responsibility…企業の社会的責任

    リスクアセスメント

    1. リスク特定 管理すべき情報資産洗い出しと脅威・脆弱性の明確化
      • 脅威 情報システムや組織に損失や損害・危害をもたらす事故の潜在的な原因
      • 脆弱性 脅威の発生を誘引する、資産固有の欠陥やセキュリティホールなどの弱点
    2. リスク分析 情報資産に対するリスクの識別とリスク値(リスクの大きさ)の算出
    3. リスク評価 リスク影響度の検討とその許容可能性の判定

    リスクの大きさ = 脅威の大きさ × 脆弱性の大きさ × 資産価値

    参考URL

    Wikipedia 「リスクアセスメント」

    不正アクセス禁止法

    • 他人のID・パスワードを盗みだし、その者になりすまして不正にシステムにアクセスする
    • システムの欠陥・不備などを悪用してシステムの制御機能を回避し、そのシステムに不正にアクセスする
    • 本人の承諾なしに、第三者にID・パスワードを教える
    • 上記を助長する行為

    不正競争防止法

    • 営業秘密や営業上のノウハウの不正取得、使用
    • 他人の商品と類似する商品、商品名、デザイン、ロゴマーク

    限定提供データ

    • 新たに保護される
    • ビッグデータ等を念頭においた、データ。例)携帯電話位置情報、POS

    オプトアウト

    • 勝手に広告メールを送ってくる
    • 個人情報の取得、提供の拒否

    オプトイン

    承諾した時だけ送ってくる

    プロバイダ責任制限法

    送信防止措置ができるのに対処をしないプロバイダは、損害を賠償する責任が問われる

    知的財産権

    著作権

    • 権利を取得するための申請や登録などの手続が不要である。
    • フリーソフトウェアマニュアル 
    • プログラム言語アルゴリズム ×

    産業財産権

    特許権

    • 機能を実現するために考え出された独創的な発明
    • 特許出願から20年存続

    実用新案権

    物品の形状や構造または組み合わせ

    意匠権

    工業製品のデザインや形状

    商標権

    トレードマーク

    DRM

    • Digital Rights Management(ディジタル著作権管理
    • コンテンツの著作権を保護するため、利用や複製を制御、制限する技術

    労働基準法

    • 賃金や就業時間、休暇などに関する最低基準を定めた
    • 時間外労働や休日労働 → 労使の協定を書面で締結し,行政官庁に届け出
    • “労働者”に該当
      • アルバイト
      • 正社員
      • パートタイマ
      • 派遣労働者

    労働者派遣法

    • 雇用期間が終了後、派遣先は雇用OK
    • 派遣元企業と派遣先企業間で労働者派遣契約 → 派遣労働者と派遣先企業の指揮命令関係
    • 他社の労働者を派遣することは不可
    請負契約派遣契約
    著作権の帰属先請負業者派遣先

    OSS

    • オープンソース
    • ソフトウェア著作権の保持
    OSLinaxAndroid
    Web サーバApache
    メールソフトThunderbird
    ブラウザFirefox
    データベースMySQL、PostgreSQL

    クロスライセンス

    クロスライセンス互いの特許を許諾
    アクティベーション不正防止のため認証を行う

    個人情報保護法

    • 個人情報の項目や提供に変更は本人への通知の必要あり。削除は不要。

    要配慮個人情報

    人種、信条、社会的身分、病歴、犯罪の経歴

    公益通報者保護法

    私的な

    ISO

    ISO(国際標準化機構)

    ISO9000品質管理
    ISO14000環境管理
    ISO20000ITサービス
    ISO27000セキュリティ管理
    ISMS適合性評価制度

    ISMS

    ITU

    ITU(国際電気通信連合:International Telecommunication Union)とは、電気通信の標準化を行う国際標準化機関です。

    IEC

    IEC(国際電気標準会議:International Electrotechnical Commission)とは、電気および電子技術の標準化を行う国際標準化機関です。

    ICANN

    ICANN(The Internet Corporation for Assigned Names and Numbers)とはインターネットで使用されるドメイン名やIPアドレスなどの管理を世界規模で行う非営利団体です。

    経営戦略

    SWOT分析

    強み(Strengths)、弱み(Weaknesses)、機会(Opportunities)、脅威(Threats)

    3C分析

    Customer(顧客)、Competitor(競合)、Company(自社)

    PPM

    VRIO分析

    Value「経済的な価値」、Rareness「希少性」、Imitability「模倣可能性」、Organization「組織」の4項目から、自社の経営資源を評価

    ポジショニング分析

    • 自社と他社の相対的比較
    • ポジショニングマップ

    RFM分析

    最終購入日(Recency)、購入頻度(Frequency)、購入金額(Monetary)

    回帰分析

    相関関係のあるデータを直線や曲線で近似し関数を得る

    主成分分析

    数の多い変数を集約する手法

    BSC

    • バランススコアカード
    • 財務、顧客、業務プロセス、学習と成長

    KPI

    • Key Performance Indicator(重要業績評価指標)
    • 目標達成のための進捗状況
    • 新規顧客獲得 → 顧客訪問回数

    KGI

    • Key Goal Indicator(重要目標達成指標)
    • 明確な目標設定
    • 例)「2024年度に利益額20億円を達成」

    IoT

    • Internet of Thing
    • コンピュータ以外のモノがインターネットを利用し相互にサービスを提供すること

    テレマティクス

    • IoTの一種です。
    • コネクテッドカー(運転中ネット接続)
    • テレマティクス保険(実際の運転状況を保険料に反映)

    エッジコンピューティング

    IoTデバイスの近くIoTサーバの負荷低減リアルタイム性向上となる処理をする。

    M2M

    • Machine to Machine
    • 機械同士が自律的に情報のやり取りをする

    P2P

    • Peer to Peer
    • PC等端末間接続でお互いの機能のやり取りをする

    API

    • API(Application Programming Interface)Web API ともいいます。
    • アプリケーションを公開し、他のアプリケーションから起動し連携する仕組み
    • 例)Google Maps API

    RPA

    https://ntorelabo.com/2023/02/04/4157/#co-index-5

    ITガバナンス

    • ITを適切に活用する組織能力
    • IT戦略の策定・実行
    • 経営戦略とIT戦略との整合性の評価のフレームワークを適用

    ITIL

    • ITIL(Information Technology Infrastructure Library)とは、
    • ITSM(ITサービスマネジメント)のベストプラクティス

    ロードマップ

    • ロードマップは、プロジェクトマネジメントの際の工程表です。
    • 技術ロードマップは、自社の技術の未来の動向などを予測し、取り組むべき技術の道のりを時系列で示したものです。

    ダイバーシティ

    多様性として性別や年齢、人種の様々な人材を採用し、企業の成長を狙う考え方

    スマー卜シティ

    ICTやIoT、AIによって課題解決を狙う都市

    SCM

    • SCM(Supply Chain Management:サプライチェーンマネジメント)
    • 資源調達・製品の製造・流通・販売などの一連の業務を統合

    バリューチェーン分析

    • 主活動 … 製造、出荷物流、販売、サービス
    • 支援活動 … 人事管理、技術開発

    セグメントマーケティング

    • セグメントマーケティングあるいはターゲットマーケティング
    • 対象となる顧客(市場)を、年齢、性別、地域、所得、趣味などの各要素を用いて細かく分類し、その分類された顧客(市場)に絞って広告やプロモーション活動を行うことです。

    インバウンドマーケティング

    • プル型
    • ブログ、SNS

    アウトバウンドマーケティング

    • プッシュ型
    • 広告、イベント

    オムニチャネル

    将来の販売経路とインターネット通販を統合

    マーチャンダイジング

    消費者のニーズに合った商品を、適切な数量、価格、販売形態などで提供するための企業活動

    ビジネスモデルキャンバス

    既存のビジネスモデルの認識を共有するためのフレームワーク

    カンバリゼーション

    自社、グループ企業の製品間で売り上げを奪い合う

    BPR

    • Business Process Reengineering
    • 組織の構造、管理体制の抜本的に見直し、再構築

    ジョイントベンチャ

    • 2社以上の企業が共同出資して経営する企業
    • 買収合併より即効性がある

    アライアンス

    業務提携

    M&A

    企業の合併や買収によって相手企業の支配権を取得すること

    JIT

    • ジャストインタイム(just in time)
    • 在庫最小化

    カンバン方式

    • 生産指示票を”かんばん”と呼ぶ
      (納期、生産量が記載されている、ICタグ)

    セル生産方式

    一人、少人数で完成まで担当(対義語:ライン生産)

    アマゾフの成長マトリクス

    製品と市場から4つの成長戦略

    デザイン思考

    利用者を中心にサービスをデザインするアプローチ

    ハッカソン

    ハッカソンは、技術者が、短期間で作ったソフトウェアやサービスの成果物を評価するイベント

    「ハック」と「マラソン」

    ダーウィンの海

    PoC

    • Proof of Concept
    • 開発前の検証

    機械学習

    教師あり学習

    正解を与える

    教師なし学習

    正解がない状態から法則性を学習させる

    RFP

    提案依頼書(Request for Proposal

    https://ntorelabo.com/2023/02/04/4157/#co-index-9
    【WordPress】オリジナルテーマ作成手順

    1)テーマのディレクトリ作成する

    wp-content/themes/ ディレクトリ内にテーマ名のディレクトリを作成します。

    public\wp-content\themes\テーマ名

    2)テーマに必要なファイルの作成(最小構成)

    最小構成

    テーマ名ディレクトリ直下にstyle.cssとindex.phpを作成します。

    • index.php:テーマの基本テンプレート
    • style.css:テーマの名前などを記述
      ※テーマ名も必須

    「style.css」を作成

    style.cssにコメント形式で詳細情報を記述します。

    @charset "UTF-8"; 
    /*
     Theme Name: mytheme 
    */

    「index.php」を作成

    <!DOCTYPE html>
    <html lang="ja">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
    
      <?php wp_head(); ?>
    </head>
    <body>
      
      <?php wp_footer(); ?>
    </body>
    </html>
    

    <?php wp_head(); ?>、<?php wp_footer(); ?>の記述によって下記の通りになります

    • WordPressの基本機能のコードの出力(管理ツールバーが表示)
    • プラグイン機能のコードが出力

    パーツファイルを作成

    「header.php」を作成

    <!DOCTYPE html>
    <html lang="ja">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta name="description" content="<?php bloginfo( 'description' )?>">
      <title><?php bloginfo( 'name' ); ?></title>
      <?php wp_head(); ?>
    </head>
    <body>

    「footer.php」を作成

    <?php wp_footer(); ?>
    </body>
    </html>

    「index.php」を編集

    <?php get_header(); ?>
    
    <?php get_footer(); ?>

    メニュー表示

    外観>メニューからナビゲーションの編集

    ※初期状態ではOFF状態で表示されていません

    「functions.php」もしくはプラグイン「WPCode」PHP スニペットで下記を記述

    add_action('after_setup_theme', //テーマ初期化のタイミングで関数を読み込み
    	function() {
    		add_theme_support('menus'); //メニュー機能をON 
    		register_nav_menus([ //メニューの表示位置を作成
    			'header_nav' => 'ヘッダーナビゲーション'
    		]);
    	}
    );

    ▼header.phpを編集

    <!DOCTYPE html>
    <html lang="ja">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta name="description" content="<?php bloginfo( 'description' )?>">
      <title><?php bloginfo( 'name' ); ?></title>
      <?php wp_head(); ?>
    </head>
    <body>
        <header>
        <?php wp_nav_menu(); ?>
        </header>

    投稿ページ用テンプレートの作成

    single.phpを作成

    <?php
    /**
     * Template Name: テンプレート1
     * Template Post Type: post,page
     */
    ?>
     
    <?php get_header(); ?>
      <?php
      if (have_posts()) :
        while (have_posts()) : the_post();
      ?>
          <h1><?php the_title(); ?></h1>
          <?php the_content(); ?>
      <?php
        endwhile;
      endif;
      ?>
    <?php get_footer(); ?>

    アイキャッチ機能を有効化する

    「functions.php」もしくはプラグイン「WPCode」PHP スニペットで下記を記述

    add_action('after_setup_theme', //テーマ初期化のタイミングで関数を読み込み
    	function() {
    		add_theme_support( 'post-thumbnails' ); //アイキャッチ画像をON
    	}
    );

    ↓テンプレートファイルに追記

    <?php if (has_post_thumbnail()) : ?> 
        <?php the_post_thumbnail( array(200,150), array( 'class' => 'icatch' ) ); ?>
    <?php endif; ?>

    投稿一覧用テンプレートの作成

    ↓index.phpを編集

    <?php get_header(); ?>
      <h1>投稿一覧</h1>
      <hr>
      <?php
      if (have_posts()) :
        while (have_posts()) : the_post();
      ?>
        <?php if (has_post_thumbnail()) : ?> 
          <?php the_post_thumbnail( array(200,150), array( 'class' => 'icatch' ) ); ?>
        <?php endif; ?>
        <h2><a href="<?php echo get_permalink(); ?>"><?php the_title(); ?></a></h2>
        <?php the_category( ' / ' ); ?>
        <hr>
      <?php
        endwhile;
      endif;
      ?>
    <?php get_footer(); ?>

    固定ページ用テンプレートの作成

    3)「functions.php」、「header.php」、「footer.php」、「sidebar.php」

    functions.php

    cssやjsファイルの読み込みの記述等

    <?php
    add_action( 'after_setup_theme', function(){
      register_nav_menus( array(
      'global-nav' => 'グローバルメニュー'
      ));
    });
    add_action( 'after_setup_theme', function(){
      add_theme_support( 'custom-logo' );
    } );
    add_action('wp_head', function () {
    	?>
    	<!-- Googleフォント -->
      <link rel="preconnect" href="https://fonts.googleapis.com">
      <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
      <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@500;700;900&display=swap" rel="stylesheet">
    	<?php
    });
    add_action(
      'wp_enqueue_scripts',
    	function() {
        wp_enqueue_style( 'destyle', 'https://cdn.jsdelivr.net/npm/destyle.css@4.0.1/destyle.css' );
        wp_enqueue_style( 'style', get_template_directory_uri() .'/assets/css/style.css' );
      }
    );
    add_action(
      'wp_enqueue_scripts',
      function(){
        wp_enqueue_script( 'main-js', get_stylesheet_directory_uri() . '/assets/js/main.js', array( 'jquery' ), true, true);
      }
    )
    wp_enqueue_style($handle, $src, $deps, $ver, $media);
    引数説明初期値
    $handleスタイルシートのハンドル名を指定。なし
    $srcスタイルシートへのパスfalse
    $deps依存する(このスタイルシートより前に読み込まれる必要がある)他のスタイルシートのハンドル名を配列で指定する。
    依存関係がない場合は falseを指定する。
    array()
    $verバージョンを指定。
    ブラウザキャッシュ対策にもなる。
    false
    $mediamedia属性に関する指定all

    第4引数でキャッシュをクリア

    searchform.php

    検索フォームパーツを記載したファイルです。

    get_search_form()関数でphpform.phpを呼び出します。

    search.php

    検索結果を表示するページです。

    Next.jsでGoogleタグマネージャーの実装、アンチフリッカータグ(Anti-flicker snippet)

    Next.js 13以降では、@next/third-partiesの使用が推奨

    タイミングの問題:

      • インラインスクリプトは即時実行されますが、loadingクラスを使用して可視性を制御しています
      • 2000msのタイムアウトが設定されており、その間にGTMが正しく初期化されない可能性があります

      layout.tsxでGTMの実装が2箇所で重複しています:

      インラインスクリプトでの実装、@next/third-partiesを使用した実装、GTMが2回初期化される可能性がある。タイミングの競合が発生する可能性がある。

      アンチフリッカータグ

      アンチフリッカータグ(Anti-flicker snippet)は、A/Bテストツール(Google Optimize等)使用時に発生する「ちらつき」(FOOC: Flash of Original Content)を防ぐための重要な仕組みです。

      (function(p,r,o,j,e,c,t,g){
          // 1. ページ読み込み開始時にスタイルを追加
          p['_'+t]={}; // タイマーオブジェクトの初期化
          g=r.createElement('script');
          g.src='https://www.googletagmanager.com/gtm.js?id=GTM-'+t;
          r[o].prepend(g); // GTMスクリプトの読み込み
          
          // 2. 非表示用のスタイルを追加
          g=r.createElement('style');
          g.innerText='.'+e+t+'{visibility:hidden!important}';
          r[o].prepend(g);
          
          // 3. 非表示クラスを追加
          r[o][j].add(e+t);
          
          // 4. タイムアウト処理
          setTimeout(function(){
              if(r[o][j].contains(e+t)){
                  r[o][j].remove(e+t); // タイムアウト時にクラスを削除
                  p['_'+t]=0;
              }
          },c) // cはタイムアウト時間(ミリ秒)
      })(window,document,'documentElement','classList','loading',2000,'[GTMのID]')

      ページ読み込み開始時に、コンテンツを一時的に非表示にする Google Optimize(またはGTM)がロードされるまでコンテンツを隠し続ける 設定された時間(この場合2000ミリ秒)以内にバリエーションが適用されない場合、オリジナルコンテンツを表示

      環境変数

      優先順位

      1. .env.development.local / .env.production.local
      2. .env.local
      3. .env.development / .env.production
      4. .env

      next dev実行時は開発用GTM IDが使用される next build && next start実行時は本番用GTM IDが使用される

      // .env.development
      NEXT_PUBLIC_GTM_ID=GTM-開発用ID
      
      // .env.production
      NEXT_PUBLIC_GTM_ID=GTM-本番用ID

      Next.jsではクライアントサイドで使用する環境変数には必ずNEXT_PUBLIC_プレフィックスが必要です。

      .env

      NEXT_PUBLIC_GTM_ID=GTM-xxxxxxx

      layout.tsx等

      // layout.tsxの先頭で確認
      console.log('GTM ID:', process.env.NEXT_PUBLIC_GTM_ID);
      
      const gtmId = process.env.NEXT_PUBLIC_GTM_ID;
      
      <GoogleTagManager gtmId={process.env.NEXT_PUBLIC_GTM_ID as string} />
      【CCNA】セキュリティーの基礎

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

      OSアプリケーションの
      定期的な更新
      セキュリティホール(プログラムの不具合のよるセキュリティ上の弱点)を防ぐため
      ネットワークデバイスの
      物理的な保護
      鍵付きのラックに保護
      ユーザに対する
      セキュリティ教育
      FW、IDS/IPS、
      ウィルス対策ソフトなど
      のセキュリティシステムの配備
      ネットワークセキュリティの要件に応じて、以下のシステムを組み合わせて配置します。
      ・FW(FireWall):パケットフィルタリング
      ・IDS(Intrusion Detection System):侵入者を通知
      ・IPS(Intrusion Prevention System):侵入行為を防ぐ
      簡単なパスワードを
      使用しない
      多要素認証認証の要素を複数組み合わせる
      ・知識要素:記憶している情報(ID、パスワード、PIN番号)
      ・所有要素:所有している物(電話番号を使ったSMS認証、ワンタイムパスワード発生器、MACアドレス)
      ・生体要素:(指紋、網膜)

      ネットワークデバイスのセキュリティ

      CDPの無効化隣接する危機に情報を与えることになるので、必要ない場合は無効化します。
      【CDPの無効化】(config)#no cdp run
      HTTPサーバとHTTPSサーバの無効化リモートアクセスにHTTP/HTTPSを使ったGUI操作を提供するサービスで、通常SSHを使うので必要ない場合は無効化します。
      【HTTPサーバの無効化】(config)#no ip http server
      【HTTPSサーバの無効化】(config)#no ip http secure-server
      セキュアなプロトコルの使用リモートアクセスには暗号化権限のないTelnetではなく、暗号化権限のあるSSH接続のみを使用する
      【Telnetを無効化、SSH接続のみ有効化】
      (config)#line vty 0 4
      (config-line)#transport input ssh
      RSAホスト鍵を生成
      (SSHサーバの設定)
      Router(config)#hostname R1
      ※機器名をデフォルトから変える必要がある
      R1(config)#crypto key generatersa
      未使用なポートの無効化スイッチはデフォルトで全てのポートが有効化されているので、使用したいポートは無効化しておきます。
      (config-if)#shutdown
      パスワードの暗号化現在設定されているパスワードも、これから設定するパスワードも全て暗号化する
      (config)#service password-encryption
      簡単なパスワードは使用しない
      バナーに不要なメッセージを載せないホスト名など、不正ログインのヒントになるような情報

      スイッチのセキュリティ

      • アクセスポートにする…トランクポートやネイティブVLANがデフォルトになっていると狙われる
      • ネイティブVLANを未使用のVLANに変更する
      • shutdownする

      情報セキュリティポリシー

      • ポリシー(基本方針)…考え方や方針
      • スタンダード(対策基準)…対策内容
      • プロシージャ(実地手順)…

      人を狙った攻撃

      ソーシャルエンジニアリング人を狙った攻撃のうち、コンピュータネットワークを使わない攻撃の総称。
      例:パスワードの覗き見
      フィッシング正規の業者を装ったメールを送り、偽のサイトに誘導して個人情報をを入力させようとする行為
      ヴィッシング正規の業者を装ったメールを送り、偽のフリーダイヤルに誘導して個人情報をを入力させようとする行為
      スピアフィッシング特定の企業や人物を狙ったフィンシング
      ホエーリング社長や政治関係者など、重要な人物を狙ったフィッシング
      スミッシングSMS(ショートメッセージサービス)を使ったフィッシング
      ファーミングDNSを悪用して偽のサイトに誘導するフィッシング
      水飲み場攻撃攻撃対象が普段アクセスするサイトを改竄しておき、サイトにアクセスするだけでマルウェアに感染させる攻撃
      ブルートフォースアタックブルートフォースアタック(総当たり攻撃)はパスワードを破る手法の一つで、パ スワードに使用されている文字列を推測し、パスワードが解除できるまで考えられ るパターンを試行し続ける攻撃手法です。

      ゼロデイ攻撃

      まだ対策が行われていない、脆弱性を狙った攻撃をさします。無防備な状態をゼロデイといいます。

      スプーフィング

      スプーフィングとは送信元を偽装する行為です。

      DoS攻撃1台のコンピュータからターゲットに大量のパケットを送る
      DDoS攻撃複数のコンピュータからターゲットに大量のパケットを送る
      リフレクション攻撃送信元を偽った要求をサーバに送り、ターゲットに大量の応答を返すように仕向ける攻撃
      中間者攻撃正規の送信者と受信者の間に入りデータの盗聴や改変をする攻撃
      バッファーオーバーフロー攻撃バッファ容量を超えるデータを使い、悪意のある命令を実行させる攻撃

      マルウェア

      マルウェアとは、悪意のあるプログラムの総称です。

      <主なマルウェア>

      ウィルス他のプログラムに寄生して悪さをするプログラム。規制されたプログラムを使用することで感染が広がる
      ワーム単独で増殖し、自ら感染を拡大させる
      トロイの木馬有益なプログラムを装ってコンピュータに侵入するマルウェア

      Cisco AMP

      Cisco Advanced Malware Protection(AMP)はCiscoが提供するマルウェア対策製品です。

      • サンドボックス機能
      • リアルタイムのマルウェア検知による侵入防御
      • ネットワーク内のファイルの継続的分析によって、進入してしまったマルウェアの封じ込み

      ファイアウォール

      【ファイアウォールの機能】

      • パケットフィルタリング…ルールに従って、パケットの通過を許可、破棄をする機能
      • ステートフルインスペクション…通信のフローを監視し、不適切な通信を拒否する機能

      内部(Inside)ゾーン外部から守るべきネットワーク。基本的に信頼できるものとして扱う。
      外部(Outide)ゾーン攻撃元となる可能性のあるネットワーク。基本的に信頼できないものとして扱う。
      DMZ
      (DeMilitarized Zone)
      非武装ゾーン:内部と外部の中間。基本的に外部からアクセスできるのはこのゾーン

      NGFW

      NGFW:Next-Generation FireWall:次世代ファイアウォール

      • 従来型ファイアウォールの機能:IPアドレスやポート番号を基にしたフィルタリング
      • AVC(Application Visibility and Control:アプリケーションの識別と制御):アプリケーションの情報を基にしたフィルタリング(同じポート番号80のHTTP通信でも、Googleは許可するがTwitterは許可しないなどが可能)
      • URLフィルタリング:悪意のあるWEBサイトにアクセスしてしまうことを防ぐ

      SYNフラッド攻撃

      接続開始を要求するSYNパケットだけを次々送りつけ、ACKパケットの返信をわざと怠り放置する。相手側には応答待ちのままTCPコネクションの確立ができません、このようなハーフオープン状態を大量に発生させサーバのリソースを奪います。

      NGIPS

      NGIPS(Next-Generation Intrusion Prevention System:次世代侵入防止システム)はこれまで使われていたIPSよりも高度な機能を備えたIPS。

      • 必要なイベントのみが記録される
      • マルウェアの防御
      • 将来のIPSの機能 … シグネチャ(悪意の攻撃を識別するための情報)を参照し、悪意あるパケットの受信やネットワークの侵入を防ぐ

      Cisco Firepower

      Cisco FirepowerとはNGFWNGIPSを搭載したCiscoのセキュリティ製品です。

      username

      ※強力な暗号化アルゴリズムとして、sha256(PBKDF2)とscryptの使用がCiscoにより推奨。

      特権レベル説明
      15・特権モードでセッションを開始する(Router#)
      ・特権コマンドの全てのコマンドが使用可能
      1・ユーザモードでセッションを開始する(Router>)
      ・ユーザコマンドの全てのコマンドが使用可能
      0・ユーザモードでセッションを開始する(Router>)
      ・ユーザコマンドの一部のコマンドが使用可能

      <注意事項>

      • 1つのユーザーに対して設定できるパスワードは1つのみ(後から入力したパスワードが有効になる)
      • 1つのユーザーに対して「password」または「secret」のどちらか一方しか使用できない(後から入力したコマンドは受け付けられない)

      enableパスワード

      lineパスワード

      ※イネーブルパスワードとイネーブルシークレットパスワードが両方ともに設定されている場合、イネーブルシークレットパスワードの方が優先されます。

      【特権モードに移行するためのパスワードを設定】
      (config)#enable password
      
      【特権モードに移行するための暗号化されたパスワードを設定】
      (config)#enable secret 
      【コンソールパスワードの設定】
      
      (config)#line console 0
      (config-line)#password < password >
      (config-line)#login
      
      ※コンソールポートは一つしかないためライン番号は常に0を指定

      <コンソールポートでの認証>

      • コンソールポートのデフォルトはloginコマンドなし(no login)
      • loginコマンドなし ⇒ パスワード要求なし(認証機能は無効)
      • loginコマンドあり ⇒ パスワード入力が必要(認証機能は有効)

      <VTYでの認証>

      • VTYポートのデフォルトはlogin
      • passwordコマンドなしの場合「Password required, but none set」と表示される

      クリアテキストで表示されているパスワードを全て暗号化するコマンド
      (config)#service password-encription

      ローカルデータベースで使用するユーザアカウントの作成
      (config)#username {ユーザ名} password {パスワード}

      仮想端末回線にアクセスしてきたユーザをローカルデータベースで認証する
      (config)#line vty {開始VTY番号} [{終了VTY番号}]
      (config-line)#login local

      VTYポートへ接続する際に使えるプロトコルの指定
      (config)#line vty {番号} {終了番号}
      (config-line)#transport input {プロトコル} {プロトコル}

      sshを使うを使いREMOTEルータに外部からログイン

      Router#ssh {-l ユーザ名} [-v SSHバージョン] [-p 接続先ポート番号] {宛先IPアドレス|ホスト名}

      VTYアクセス制御

      VTYアクセス制御とは、Telnet/SSHリモートアクセスのアクセス制御です。

      • 管理者のホストなど特定のIPアドレスからのみVTYアクセスできるようにするとよりセキュアです。
      • 標準ACLを使用する

      L2セキュリティ

      【ポートセキュリティの設定で使用する主なコマンド】

      ARPスプーフィング

      • ARPを使った中間者攻撃
      • DAIで防ぐことができる

      <ARPスプーフィングの動作>

      DAI

      • DAI(Dynamic ARP Inspection)ARPスプーフィングを防ぐ
      • DAIは、ARPパケットを検査する機能です。
      • 「Trustedポート」(信頼するポート)と、「unTrustedポート」(信頼しないポート) に分類します。
      • DAIを有効にするとデフォルトで全てのポートが信頼できないポートになります。

      <DAIでは、以下の2種類のバインディングテーブルを利用>

      バインディングテーブルDHCPスヌーピングバインディングテーブル
      DHCP環境必要 DHCPスヌーピングバインディングテーブル
      非DHCP環境不要 スタティックに設定されたIPアドレスとMACアドレスの関連付けテーブル

      <DAIの動作>

      <DAIの設定>

      1. DAIの有効化
      2. 信頼できるポートの指定
      3. 着信したARPパケットに対して行う検査の追加(オプション)
      1. (config)#ip arp inspection vlan {VLAN番号}
      2. (config-if)#ip arp inspection trust
      3. (config)#ip arp inspection validate {src-mac | dst-mac | ip}

      src-mac … イーサネットヘッダの送信元MACアドレスと、ARPパケットのデータの送信元MACアドレスが同じかを検査
      dst-mac … イーサネットヘッダの宛先MACアドレスと、ARPパケットのデータの宛先MACアドレスが同じかを検査
      ip … ARPパケットのデータに含まれるIPアドレスを検査

      DHCPスプーフィング

      DHCPスプーフィング(なりすまし)とは、攻撃者が不正なDHCPサーバを立ち上げて、DHCP OFFERで自身のIPアドレスをデフォルトゲートウェイにするよう通知し、ユーザからのパケットを盗聴する攻撃です。

      【DHCPの動作】

      【DHCPスプーフィングの動作】

      DHCPスヌーピング

      • DHCPスヌーピングは DHCPパケットを監視する機能です。
      • 各ポートを「trustedポート」(信頼するポート)と、「untrustedポート」(信頼しないポート) に分類します。
      • trustedポートに着信したDHCPパケットは全て許可します。
      • untrustedポートに着信したDHCPパケットは、クライアントからサーバに送られるDHCPパケット(DISCOVER…クライアント接続、REQUEST …DHCP要求)は許可しますが、サーバからクライアントに送られるDHCPパケット(OFFER、ACK)は拒否します。

      [DHCPスヌーピングの設定]

      1. DHCPスヌーピングの有効化
      2. DHCPスヌーピングを有効にするVLANの指定(同時に複数の指定が可能)
      3. 信頼できるポートの指定(DHCPサーバが接続している方向のポートに適用)
      4. 信頼できないポートでDHCP Option 82付きパケットの受信を許可(オプション)

      1. (config)#ip dhcp snooping
      2. (config)#ip dhcp snooping vlan {VLAN番号} [VLAN番号]
      3. (config-if)#ip dhcp snooping trust
      4. (config)#ip dhcp snooping information option allow-untrusted

      DHCPスヌーピングで処理されたパケットの数の確認
      ・#show ip dhcp snooping statistics
      ・#show ip dhcp snooping statistics detail

      DHCPパケットのレート制限
      インターフェースが受信できる1秒あたりのDHCPパケット数を設定することでDoS攻撃を防ぎます。
      trustedポートとuntrustedポート両方に設定が可能

      (config-if)#ip dhcp snooping limit rate {1秒あたりに受信可能なDHCPパケット数}

      DHCPスヌーピングバインディングデータベース

      DHCPスヌーピングを有効にすると、「DHCPスヌーピングバインディングデータベース」を作成します

      <以下の情報が記録されます>

      • DHCPクライアントのMACアドレス
      • DHCPクライアントに割り当てられたIPアドレス
      • IPアドレスのリース時間
      • ポートが属するVLAN
      • スイッチのポート番号

      ポートセキュリティ

      セキュアMACアドレス

      ポートセキュリティが有効なポートで許可されるMACアドレスをセキュアMACアドレスと呼びます。

      スティッキーラーニング

      動的に学習したセキュアMACアドレスをrunning-configに書き込む

      【セキュリティ違反時の動作】

      【err-disabled状態になったポートを復旧させる方法】

      err-disableは、機械的にポートをshutdownさせていますので、人の手で1度 shutdown状態にします。
      その後は、通常通り no shutdownコマンドでポートを有効化させてあげるだけです。

      MACアドレス(セキュアMACアドレス)を静的に設定

      Switch(config)#interface { インターフェイス }
      Switch(config-if)#switchport mode access ←インターフェイスモードを選択
      Switch(config-if)#switchport port-security ←ポートセキュリティを有効化
      Switch(config-if)#switchport port-security mac-address { MACアドレス } ←セキュアMACアドレスを設定

      err-disabled自動復旧の有効化
      (config)#errdisable recovery cause {all | 理由}

      err-disabled自動復旧までの秒数変更
      (config)#errdisable recovery interval {秒}
      30秒~86400秒で指定(デフォルトは300秒)

      特定のインターフェースに設定してあるポートセキュリティの詳細情報を確認
      #show port-security interface

      <VLANポートのセキュリティ>

      • 接続予定の無いポートをトランクにする
      • 接続予定の無いポートをshutdownする
      • 通常使用するVLANはデフォルトで存在するVLANやネイティブVLAN以外にしておくことが推奨
        (※VLAN1はデフォルトで存在するVLANであり、全てのポートがデフォルトで属しているVLANのため、攻撃の対象になりやすいという危険性があります。)

      show port-security interface [interface-id]

      <ポートセキュリティの設定を確認>

      show port-security interface [interface-id]

      • インタフェースのセキュアMAC アドレスの最大許容数
      • インターフェイスのセキュアMAC アドレスの数
      • キュリティ違反の数
      • 違反時の違反モード
      WordPressの編集画面にCSSをあてる方法

      1)CSSファイルを用意

      下記のように実際の表示に近いスタイルをあてれるよう記載

      https://siennahare23.sakura.ne.jp/e-style/editor.css

      h2.wp-block-heading {
      	font-size: 1.3rem;
      	border-top: 1px solid var(--main-color);
      	border-bottom: 1px solid var(--main-color);
      	padding: .625em 1em;
      }
      
      h3.wp-block-heading {
      	font-size: 1.25rem;
      	border-bottom: 1px solid var(--main-color);
      	padding: .5em 1em;
      }
      
      h4.wp-block-heading {
      	font-size: 1.125rem;
      }
      
      .wp-block-group {
      	padding: 1rem;
      }
      
      .wp-block-code {
          background-color: #f2f2f2;
          overflow-x: auto;
          padding: 1rem;
      }

      2)functions.phpを編集

      「functions.php」もしくはプラグイン「WPCode」PHP スニペットで下記を記述

      add_action('after_setup_theme', //テーマ初期化のタイミングで関数を読み込み
      	function() {
      		add_theme_support( 'editor-styles' );
      	}
      );
      
      // エディターにCSS読み込み
      add_action('admin_init',
      	function() {
      		add_editor_style( 'https://siennahare23.sakura.ne.jp/e-style/editor.css' );
      	}
      );
      Next.js + TypeScriptで作る!画像ギャラリー実装(map関数)

      完成イメージ

      このチュートリアルでは、以下のような機能を持つギャラリーを作成します

      ソースファイル

      imageGallery.tsx

      // src/components/imageGallery.tsx
      'use client'
      import { useState } from 'react'
      import { X, ChevronLeft, ChevronRight } from 'lucide-react'  // Lucide Reactのアイコンを使用
      import styles from '@/styles/imageGallery.module.css'
      
      const ImageGallery = () => {
        const [selectedImage, setSelectedImage] = useState<string | null>(null);
        const [currentIndex, setCurrentIndex] = useState<number>(0);
      
        const images = [
          "https://bizlabo.site/sample-img/column1.jpg",
          "https://bizlabo.site/sample-img/column2.jpg",
          "https://bizlabo.site/sample-img/column3.jpg",
          "https://bizlabo.site/sample-img/column4.jpg",
          "https://bizlabo.site/sample-img/column5.jpg",
          "https://bizlabo.site/sample-img/column6.jpg",
          "https://bizlabo.site/sample-img/column7.jpg",
          "https://bizlabo.site/sample-img/column8.jpg",
        ];
      
        // 引数はReact.MouseEvent型として、イベントオブジェクトを受け取り、イベント伝播を停止する
        const handleNext = (e: React.MouseEvent) => {
          e.stopPropagation(); // 親要素へのイベント伝播を停止
          setCurrentIndex((prev) => (prev + 1) % images.length); // 画像の数で割った余りを新しいインデックスとするため、画像の数を超えた場合は0に戻る
          setSelectedImage(images[(currentIndex + 1) % images.length]);
        };
      
        const handlePrev = (e: React.MouseEvent) => {
          e.stopPropagation();
          setCurrentIndex((prev) => (prev - 1 + images.length) % images.length);
          setSelectedImage(images[(currentIndex - 1 + images.length) % images.length]);
        };
      
        return (
          <div className={styles.container}>
            <div className={styles.grid}>
              {images.map((image, index) => (
                <img
                  key={index}
                  src={image}
                  alt={`画像 ${index + 1}`}
                  className={styles.image}
                  onClick={() => {
                    setSelectedImage(image);
                    setCurrentIndex(index);
                  }}
                />
              ))}
            </div>
      
            {selectedImage && (
              <div className={styles.modal} onClick={() => setSelectedImage(null)}>
                <div className={styles.modalContent}>
                  <button className={styles.closeButton} onClick={() => setSelectedImage(null)}>
                    <X size={32} />  {/* Xアイコン */}
                  </button>
                  <button className={styles.prevButton} onClick={handlePrev}>
                    <ChevronLeft size={40} />  {/* 左矢印アイコン */}
                  </button>
                  <img
                    src={selectedImage}
                    alt="拡大画像"
                    className={styles.modalImage}
                    onClick={(e) => e.stopPropagation()}
                  />
                  <button className={styles.nextButton} onClick={handleNext}>
                    <ChevronRight size={40} />  {/* 右矢印アイコン */}
                  </button>
                </div>
              </div>
            )}
          </div>
        );
      };
      
      export default ImageGallery;

      imageGallery.module.css

      .modal {
        position: fixed;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        background-color: rgba(0, 0, 0, 0.6);
        display: flex;
        align-items: center;
        justify-content: center;
      }
      
      .modalContent {
        position: relative;
        max-width: 90vw;
        max-height: 90vh;
      }
      
      .closeButton {
        position: absolute;
        top: -40px; /* 画像の上に配置 */
        right: -40px; /* 画像の右に配置 */
        background: none;
        border: none;
        color: white;
        cursor: pointer;
        padding: 8px;
        z-index: 1;
        transition: all 0.2s;
        border-radius: 50%;
        display: flex;
        align-items: center;
        justify-content: center;
      }
      
      .closeButton:hover {
        background-color: rgba(255, 255, 255, 0.1);
        transform: scale(1.1);
      }
      
      .prevButton,
      .nextButton {
        position: absolute;
        top: 50%;
        transform: translateY(-50%);
        background: none;
        border: none;
        color: white;
        cursor: pointer;
        padding: 16px;
        z-index: 1;
        transition: all 0.2s;
        border-radius: 50%;
        display: flex;
        align-items: center;
        justify-content: center;
      }
      
      .prevButton:hover,
      .nextButton:hover {
        background-color: rgba(255, 255, 255, 0.1);
        transform: translateY(-50%) scale(1.1);
      }
      
      .prevButton {
        left: -60px;
      }
      
      .nextButton {
        right: -60px;
      }
      
      /* 既存のスタイル */
      .container {
        padding: 1rem;
      }
      
      .grid {
        display: grid;
        grid-template-columns: repeat(2, 1fr);
        gap: 1rem;
      }
      
      .image {
        width: 100%;
        height: auto;
        object-fit: contain;
        cursor: pointer;
        transition: transform 0.2s;
      }
      
      .image:hover {
        transform: scale(1.05);
      }
      
      .modalImage {
        max-height: 90vh;
        max-width: 90vw;
        object-fit: contain;
      }
      
      @media (min-width: 768px) {
        .grid {
          grid-template-columns: repeat(3, 1fr);
        }
      }
      
      @media (min-width: 1024px) {
        .grid {
          grid-template-columns: repeat(4, 1fr);
        }
      }
      

      map関数について

      map関数の特徴

      1. 元の配列の各要素に対して処理を行う
      2. 新しい配列を返す
      map関数の重要な2つの特徴 元の配列: [1, 2, 3] 特徴1: 各要素に対して同じ処理を適用 1 → multiply by 2 → 2 2 → multiply by 2 → 4 3 → multiply by 2 → 6 特徴2: 新しい配列を返す(元の配列は変更されない) 元の配列: [1, 2, 3] (変更されない) 新しい配列: [2, 4, 6] (処理結果の新しい配列)
      Web制作便利ツール

      ダミーテキスト

      https://webtools.dounokouno.com/dummytext

      この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。この文章はダミーです。文字の大きさ、量、字間、行間等を確認するために入れています。この文章はダミーです。

      ダミー画像

      https://picsum.photos/1920/900?random=1

      サンプル画像
      https://placehold.jp

      サンプル

      <link rel="icon" href="https://placehold.jp/100px/fcf0ed/f55229/150x150.png?text=jQ&css=%7B%22border-radius%22%3A%2215px%22%2C%22font-weight%22%3A%22%20bold%22%7D">

      「clamp」ジェネレーター「Min-Max-Value Interpolation」

      https://min-max-calculator.9elements.com

      ベーシック認証用ファイル作成

      1) 下記サイトにて以下のファイルを作成します。

      • .htaccecc
      • .htpasswd

      2) ユーザー、パスワード、サイトパスを入力すると各ファイルに記述する文字が出力されます。

      ※サイトパスは各レンタルサーバによって異なります。

      エックスサーバー/home/サーバーID/独自ドメイン名/public_html/
      さくらのレンタルサーバ/home/アカウント名/www/
      ロリポップ/home/users/{数字}/ロリポップID/web/
      mixhost/home/ユーザー名/public_html/

      3) 作成したファイルを該当サイトの所定ディレクトリに設置します。

      https://www.htaccesseditor.com/#a_basic

      テーブルタグ作成

      https://www.tagindex.com/tool/table.html

      キャッチコピー参考

      https://cacopy.com