しぐれがき

これまで挑戦したことの備忘録です

ネスぺ午前IIに向けて気を付けるポイント

f:id:shiguregaki:20170903010532j:plain
サーバ開発においてネットワークの仕組みを理解しているのは重要だと思い、2017年度秋に開催されるネットワークスペシャリストを受験することにしました。
本記事では午前IIの過去問を解いた中で間違えた/あいまいな点を整理しました。

目次

用語整理

用語 意味
CDM(H28-2)
Code Division Multiplexing;符号分割多重化
周波数帯を共有し、信号にそれぞれ異なった符号を合わせる
CSIRT(H26-19)
Computer Security Incident Response Team
コンピュータセキュリティにかかるインシデントに対処するための組織の総称
DNSEC(H26-16)
DNS Security Extensions
DNSサーバがリソースレコードにデジタル署名を付加することで、DNS応答レコードの偽造や改ざんなどを検出できる
EAP(H28-17)
Extensible Authentication Protocol;PPP拡張認証プロトコル
リモートアクセスによるユーザー認証の際に用いられるプロトコルで、PPP(Point-to-Point Protocol)を拡張し、追加的な認証方法をサポートする。
IDN(H26-15)
Internationalized Domain Name;国際化ドメイン名
従来のドメイン名で使用されているアルファベット、 数字、ハイフンに加え、そのラベルに漢字やひらがな、 アラビア文字などのASCII以外の文字を使えるようにする仕組み
IEEE 802.1X(H28-17)
認証を行うプロトコル
EAPによる認証方式が規定
ICANN(H26-19)
nternet Corporation for Assigned Names and Numbers
ドメイン名・IP アドレスなどを管理する非営利公益法人の国際機関
IETF(H26-19)
Internet Engineering Task Force
インターネット技術の標準化を推進する任意団体
IGMP(H27-8)
Internet Group Management Protocol
ホスト(Receiver)がルータ(ラストホップルータ)に対して、マルチキャストグループへの参加、維持、離脱を通知するためのプロトコル
IPv6では別機能を使うので、IGMPは利用しない
LDAP(H27-8)
Lightweight Directory Access Protocol
ディレクトリ・サービスに接続するために使用される通信プロトコル
データ形式はLDIF(LDAP Interchange Format)
MOS値(H27-15)
MOS(Mean Option Score)値
→評価者に電話機から音を聞かせて5段階で評価
MPLS(H28-9)
Multi-Protocol Label Switching
ラベルと呼ばれるタグを使用したパケット転送技術
IPv4IPv6、IPXなど様々なプロトコルに対応したラベルを付加しデータをスイッチングできる。
OFDM(H28-2) (H27-4)
Orthogonal Frequency Division Multiplexing;直行周波数分割多重
各周波数の移送を直行させて互いに干渉しないようにした
RSVP(H27-10)(H26-12)
Resource reSerVation Protocol
ネットワーク上で送信先までの帯域を予約し、通信品質を確保するプロトコル
RTSP(H27-12)
Real Time Streaming Protocol
リアルタイム性のあるデータの配布 (ストリーミング) を制御するためのプロトコル
R値(H27-15)
音声伝送品質を表す ノイズや遅延などによる劣化から算出
SAML(H28-16)
Security Assertion Markup Language;セキュリティ アサーション マークアップ ランゲージ
XMLを利用して異なるインターネットドメイン間でユーザ認証を行う規格
シングルサインオンやID連携で利用されている。
SOA(H28-25)
Service-Oriented Architecture;サービス指向アーキテクチャ
TDM(H28-2)
Time Division Multiplexing;時分割多重化
時間を一定間隔に区切り、各信号に割り当てて通信する
UDDI(H28-25)
Universal Description, Discovery and Integration;Webサービス用の検索システム
WebDAV(H28-14)
Web-based Distributed Authoring and Versioning
Webサーバ上のファイル管理
直接ファイルのコピーや削除を行ったり、ファイル所有者や更新日時などのファイル情報を取得・設定するといった機能を持つ分散ファイルシステム
WEP(H27-17)
WEP(Wired Equivalent Privacy;有線同等機器)
→ESS-ID とWEPキー(暗号化キー)
→ 暗号化アルゴリズムRC4
→暗号鍵の長さは40ビット/104ビット+24ビットのIVを付与
→弱点が発見されたので、推奨されていない
WPA(H27-17)
WPA(WiFi Protected Access)
→EnterpriseとPersonalの2種類ある
→ EnterpriseはIEEE 802.1x認証サーバを使用
→Personalは事前共有鍵モード
テンペスト攻撃(H28-19)
漏えい電波を取得し、情報を盗聴する技術
プライバシセパレータ機能(H28-21)
無線製品に同時に無線接続している端末同士のアクセスを禁止する機能
ビヘイビア法(H26-20)
ウイルス検出手法の1つであり、実行中のプログラムの振る舞い(behavior)を監視して、不審な処理が行われていないかを調べる方式
メモリインタリーブ(H26-22)
物理メモリを複数のバンクで分割して、それぞれに対して並行アクセスすることでアクセス時間を短縮することができるメモリアクセス高速化技術



個別詳細

本章では、上の用語のみでなく、関連ある情報を整理したので、それについてまとめます。
また、詳細が記載されているホームページのリンクを張っておきます。


ネットワークのQoS制御

(H28-5)に出題

QoS(Quality of Service)とは
サービスがユーザの要件にどれだけ満足しているかを図る度合
優先制御やアドミッション制御、シェーピング、ポリシングで対応する

■優先制御
→フレームの種類や宛先に応じて優先度を変えて中継する制御
■アドミッション制御
→ネットワークの情報を通信し、状況に応じて通信を制御する方法
■シェービング
→最大速度を超過しないようにトラフィックを平準化する方法
■ポリシング
→超過時には破棄するか優先度を下げるかして通信をする方法


DNSのレコード情報

(H27-1)に出題
CNAME,MX,NS,PTRなど

DNSの資源レコードは以下
※MXレコードやPTRレコードはIPアドレスではなく、ドメイン名をしていることに注意

種別 詳細種別 資源
A Address
ホストのIPアドレス(IPv4)
NS Name Server
ドメイン名と、そのドメイン名を管理するDNSサーバを対応付けたレコード
CNAME Canonical NAME
ホストの別名
SOA Start of Authority
ゾーンファイルの最初のリソースレコード
以下のDNSサーバの各種管理情報の指定
ドメインDNSサーバ名
ドメイン管理者のメールアドレス 
・ シリアル番号
・ 更新間隔 
・ 転送再試行時間 
・ レコード有効時間 
・ 否定的キャッシュ有効時間
PTR Pointer
IPアドレスの逆引き用ポインタ
MX Mail exchange
メールサーバのホスト名 優先度を付けることができる(小さいのが優先)
TXT text strings
テキスト文字列
KEY
セキュリティの鍵
AAAA Address
ホストのIPv6アドレス

参考

www.infraexpert.com



UDPを使用するプロトコル

(H27-11)に出題
UDPプロトコルを使用するプロトコルは以下

UDPプロトコルの特徴 上位プロトコル
アプリケーション層で信頼性を確保する TFTP
通信パケットサイズが小さい DNSSNMP、NTP
リアルタイム性が重視 RTPなどの動画や音声のストリーム配信
マルチキャスト、ブロードキャストをしたい DHCP、RIP


無線LANの暗号化方式

(H27-17)に出題
・WEP(Wired Equivalent Privacy;有線同等機器)
ESS-ID とWEPキー(暗号化キー)
暗号化アルゴリズムRC4
暗号鍵の長さは40ビット/104ビット+24ビットのIVを付与
弱点が発見されたので、推奨されていない
・WPA(WiFi Protected Access)
EnterpriseとPersonalの2種類ある
EnterpriseはIEEE 802.1x認証サーバを使用
Personalは事前共有鍵モード


IEEE 802.1X認証の構成要素

(H26-18)に出題
サプリカント(クライアントPCにインストールせれるソフト)
・オーセンティケータ(認証Swich、無線APなど)
・認証サーバ(RADIUSサーバ)
RADIUSクライアントはオーセンティケータが持つ

参考

sc.seeeko.com



機関の説明

(H26-19)に出題
・CSIRT(Computer Security Incident Response Team)
→コンピュータセキュリティにかかるインシデントに対処するための組織の総称
ICANN(Internet Corporation for Assigned Names and Numbers)
ドメイン名・IP アドレスなどを管理する非営利公益法人の国際機関
IETF(Internet Engineering Task Force)
→インターネット技術の標準化を推進する任意団体

まとめ

試験前に本記事をざっと見直そうと思います。
同じくネスぺ受験を考えている方のご参考になればうれしいです。

以上!

ネスぺ午前Iに向けて気を付けるポイント

f:id:shiguregaki:20170903005944j:plain
サーバ開発においてネットワークの仕組みを理解しているのは重要だと思い、2017年度秋に開催されるネットワークスペシャリストを受験することにしました。
本記事では午前Iの過去問を解いた中で間違えた/あいまいな点を整理しました。

目次

用語整理





















































































用語 意味
AC-3(H27-9)
Audio Code number 3
音声のデジタル符号化方式。映画の音声やゲームなどに使用されている。
Ajax
Asynchronous JavaScript + XML
ウェブブラウザ内で非同期通信を行いながらページの一部を書き換える
BI
Business Intelligence
経営・会計・情報処理などの用語で、企業などの組織のデータを、収集・蓄積・分析・報告することで、経営上などの意思決定に役立てる手法や技術のこと
CE(H26-28)
コンカレントエンジニアリング
製品開発における複数のプロセスを同時並行で進め、開発期間の短縮やコストの削減を図る手法
CSS
Cascading Style Sheets
HTML や XMLXHTMLSVGなどを含む)で記述された文書の体裁や見栄えを表現するために用いられるスタイルシート言語
G.729(H27-9)
人の声を対象とした音声圧縮方式。VoIPなどに使用される
EVM(H27-18)
Earned Value Management
予算および予定の観点からプロジェクトがどのように遂行されつつあるかを定量的に評価するプロジェクト管理の技法
コストとすけーじゅるを定量的に管理する
NPV(H26-23)
Net Present Value
投資期間中のキャッシュ-フローから投資対象の現在価値を算出する方法
H264/AVC(H27-9)
動画圧縮技術。デジタルハイビジョン対応のビデオカメラやワンセグの画像圧縮符号化方式などで採用されている
ITポートフォリオ管理(H26-23)
情報システムの貢献度や活用度などを分析し、バランス良くIT投資を配分する管理・分析手法
RPO(H26-21)
Recovery Point Objective
過去のどの時点までのデータを保障して復旧させるかという目標値(災害発生前への対応)
RTO(H26-21)
Recovery Time Objective
被災時点からどれだけの時間で業務を復旧させるかという目標値(災害発生後への対応)
SLA(H26-20)
Service Level Agreement
サービスを提供事業者とその利用者の間で結ばれるサービスのレベル(定義、範囲、内容、達成目標等)に関する合意
SOA(H26-24)
Service Oriented Architecture;サービス指向アーキテクチャ
アプリケーションなどをコンポーネント化(部品化)し,それらを組み合わせてシステムを作る設計手法
SMIL
Synchronized Multimedia Integration Language
XMLによって作られたマルチメディア記述用の言語
静止画、動画、音声、文字(テキスト)などの、位置レイアウト、時間軸上でのレイアウトをXMLで表現できる
SVG
Scalable Vector Graphics
XMLベースの、2次元ベクターイメージ用の画像形式の1つ
SWOT分析
外部環境や内部環境を強み (Strengths)、弱み (Weaknesses)、機会 (Opportunities)、脅威 (Threats) の4つで分析する手法
ガベージコレクション
ログラムが動的に確保したメモリ領域のうち、不要になった領域を自動的に解放する機能
かんばん方式(H27-28)
在庫をできるだけ持たない仕組みであり、「必要なものを必要な時に必要なだけ作る」という考え方に基づいている
共通フレーム
システム開発にて使用され、プロジェクトの特性や開発モデルに応じてアクティビティやタスクを取捨選択する
クラッシング技法
コストを追加することでスケジュールを短縮技法
コアコンピタンス
企業が競合他社に対して圧倒的に優位にある事業分野や,他社にはない独自の技術やノウハウを集積している中核となる部門
垂直統合(H27-26)
→企業が商品の開発・生産・販売を自社で一手に行うこと
下流にある仕入れ先や販売先との合併や買収
→製鉄メーカの鉄鉱石採掘会社の買収や合併
水平統合(H27-26)
→同一製品やサービスを提供している複数の企業が、一体化することで、その市場における規模の経済性を実現しようとするもの
→自動車メーカの軽自動車メーカの買収
成長マトリックス
アンゾフが提唱。製品と市場をそれぞれ既存・新規と分けることにより、四つの象限へと分類した。
市場開拓、多角化、市場浸透、新製品開発
製品ライフサイクル
製品が、導入期、成長期、成熟期、衰退期の4つの段階を経るという理論
動的再配置
実行中のプログラムを、メモリー上の別の領域で実行するために、アドレスを新たに割り当てること
動的リンキング
プログラムの実行に必要なライブラリやモジュールなどを、“実行時”にリンク(連結)すること
デシマルコード(H27-8)
人が認識できる英数字をHTMLコード化したもの
スパムメール対策などに使用される
デルファイ法(H27-27)
各分野の専門家にアンケートによって意見を求め,これを集計した結果を,再びアンケートとして回答者に送り,その意見を集計する
ナレッジマネジメント
企業が蓄積した知識や経験を全社的に共有し、企業が持つ競争力を活性・向上させる経営手法
ニモニックコード(H27-8)
人がコードから対象データの識別や認識を容易に行えるように付与されたコード
バランススコアカード(H28-23) (H26-23)
戦略経営のためのマネジメントシステム 財務、顧客、業務プロセス、学習と成長の4つの視点で分類する
ファストトラッキング技法
本来は順番に進めていくべきタスクを、先行タスクが完了する前に後続タスクを進めることで、スケジュールを短縮させる技法
フェールオーバ機能
クラスタリングシステムにおいて障害ノードを代替ノードに切り替える機能
ブルートフォース攻撃(H27-14)
考えられる全ての暗号鍵を自動化されたプログラムによってひたすら入力し、復号化プログラムによって、暗号が意味のある文字列になるかどうかを試行錯誤しながら調べて行く方法
マクシマックス原理(H27-29)
最高の場合が最大の利得になる戦略
マクシミン原理(H27-29)
最悪の場合が最大の利得になる戦略
メモリインタリーブ
プログラムを複数のバンクに分けて高速化を図る
メモリコンパクション
メモリ上の空き領域の断片化を解消
ライトスルー(H26-4)
記憶装置とキャッシュメモリーへのデータの書き込みを同時に行う方式
ライトバック(H26-4)
記憶装置にデータを書き込む際、いったんキャッシュメモリーにデータを書き込み、処理の空き時間ができてからキャッシュメモリーからメインメモリーに書き込む方式
リアルオプション(H26-23)
オプション価格理論を応用し,不確実性のもとでの意思決定問題において企業が有する経営上の柔軟性をオプションになぞらえて分析する考え方

個別詳細

本章では、上の用語のみでなく、関連ある情報を整理したので、それについてまとめます。
また、詳細が記載されているホームページのリンクを張っておきます。


ソートの種類

(H28-3)に出題

ソート 意味 アクセス回数オーダ
ヒープソート
2分木の各節点にデータを保持し、親のデータが2つの子のデータよりも小さくなるように作られたデータ構造にすることで並べ替える

O(logN)
シェルソート
シェルソートは挿入ソートを改良されてつくられたソートアルゴリズムで、間隔を空けて挿入ソートを行い、その間隔をだんだんと狭めていく。整列済みのリストに強い

O(N)
クイックソート
中間的な基準値を決めて、それよりも大きな値と小さな値を集めた区分に要素を振り分ける。それぞれの区分にたいして同様の処理を繰り返す。

O(N log(N))
バブルソート
隣り合う要素の大小を比較しながら整列させる
バブルとは「泡」のことで、並べ替えの過程でデータが下から上へ移動する様子が、泡が浮かんでいくように見えることからこの名前がある。

O(N2)


参考

いろいろなソートアルゴリズム



UML

(H28-16)に出題
ステートマシン図、クラス図、ユースケース図など

参考

- UML超入門_第2章



並列処理を行うための設計手法

(H27-4)に出題
SIMD(Single Instruction/Multiple Data)
一つの命令を同時に複数のデータに適用し、並列に処理する方式
・MIMD(Multiple Instruction/Multiple Data)
複数のプロセッサやプロセッサコアがそれぞれ別のデータを対象に別の命令を並行して実行する方式
・MISD(Multiple Instruction/Single Data)
一度に一つのデータを対象に複数の異なる命令を同時に実行する方式
・SISD(Single Instruction/Single Data)
命令にも扱うデータにも基本的には並列性がなく、いずれも一つの流れで順番に処理していく

参考


e-words.jp



クラスタリングシステム

(H27-5)に出題
クラスタシステムとは,複数のサーバを連携して一つのシステムとして運用するシステム
障害ノードを代替ノードに切り替える機能をフェールオーバ機能

参考

クラスタシステムの概要




動画/音声圧縮技術

(H27-9)に出題
・H264/AVC
→動画圧縮技術。デジタルハイビジョン対応のビデオカメラやワンセグの画像圧縮符号化方式などで採用されている
・AC-3
→音声のデジタル符号化方式。映画の音声やゲームなどに使用されている。
・G.729
→人の声を対象とした音声圧縮方式。VoIPなどに使用される



システム監査の順番整理

(H27-21)に出題
・計画
(1)事前調査
(2)監査計画策定
・実施
(3)予備調査
(4)本調査
(5)監査報告書作成
・報告
(6)意見交換会
(7)監査報告会

参考

www.itmedia.co.jp




M&Aの種類

(H27-26)に出題
垂直統合
→企業が商品の開発・生産・販売を自社で一手に行うこと
下流にある仕入れ先や販売先との合併や買収
→製鉄メーカの鉄鉱石採掘会社の買収や合併
水平統合
→同一製品やサービスを提供している複数の企業が、一体化することで、その市場における規模の経済性を実現しようとするもの
→自動車メーカの軽自動車メーカの買収

M/M/1モデル

(H26-2)に出題
到着率/サービス時間/窓口の数を表す
到着率はポアソン分布、サービス時間は指数分布

待ち行列理論の計算式は以下


利用率𝜌= 仕事をしている時間/全体の時間= 平均サービス時間/平均到着間隔
平均待ち時間= 𝜌/(1−𝜌) × 平均サービス時間
平均応答時間= 平均待ち時間+ 平均サービス時間= 1/(1−𝜌)× 平均サービス時間

スケジュール管理技法

(H26-19)に出題
・クラッシング技法
→コストを追加することでスケジュールを短縮
・ファストトラッキング技法
本来は順番に進めていくべきタスクを、先行タスクが完了する前に後続タスクを進めることで、スケジュールを短縮させる

まとめ

試験前に本記事をざっと見直そうと思います。
同じくネスぺ受験を考えている方のご参考になればうれしいです。

以上!

ネットワークスペシャリストを3ヶ月で合格! に向けて (2)

f:id:shiguregaki:20170903005200j:plain
こんにちは、しぐれがきです。

サーバ開発においてネットワークの仕組みを理解しているのは重要だと思い、2017年度秋に開催されるネットワークスペシャリストを受験することにしました。
以前記載した以下のブログ内容に従い、勉強を進めています。

shiguregaki.hatenablog.com


本記事では、その進捗を記載したいと思います。

目次




勉強スケジュールと進捗

ステップ1およびステップ2(午前I,II)は完了しました。
ただ、思ったよりステップ1と午前I,IIの対策に時間がかかってしまったため、午後問対策のスケジュールを見直すことにしました。。。
その分、ネスぺの~1冊当りに2週間当てていましたが1週間に短縮しました。




















ステップ 予定 実績 ステータス
ステップ1 2017/7/31(月)-8/4(金) 2017/7/31(月)-8/11(金) 完了
ステップ2(午前I,II) 2017/8/5(土)-8/27(日) 2017/8/12(土)-9/3(日) 完了
ステップ2(ネスぺの礎)
2017/8/7(月)-8/20(日)

  • >2017/9/4(月)-9/10(日)

- 着手
ステップ2(ネスぺの道)
2017/8/21(月)-9/3(日)

  • >2017/9/11(月)-9/17(日)

- 未着手
ステップ2(ネスぺの剣)
2017/9/4(月)-9/17(日)

  • >2017/9/18(月)-9/24(日)

- 未着手
ステップ3
2017/9/18(月)-10/13(金)

  • >2017/9/25(月)-10/13(金)

- 未着手
ステップ4 2017/10/14(土) - 未着手
試験日 2017/10/15(日) - 未着手



午前I,IIの対策結果

ステップ2(午前I,II)では想定よりも時間がかかってしまいましたが、どうにか合格圏内の点数にまで引き上げることができました。
ただ、毎回試験時間がぎりぎりで見直す時間が十分とれていないので、もう少しスピード分配を考えたいと思います。
また、午前IIは80%に到達していないため、午後対策をしつつも引き続き過去問は解いていこうと思います。




過去問 午前I 午前II
平成28年度秋期 25/30(83.3%) 16/25(64.0%)
平成27年度秋期 24/30(80.0%) 19/25(76.0%)
平成26年度秋期 24/30(80.0%) 18/25(72.0%)
合格ライン 18/30(60.0%) 15/25(60.0%)





ネスぺ午前Iに向けて気を付けるポイント

過去問を解いた中で間違えた/あいまいな点を整理しました。
よろしければ、ご参考にしてください。

http://shiguregaki.hatenablog.com/entry/p50shiguregaki.hatenablog.com




ネスぺ午前IIに向けて気を付けるポイント

過去問を解いた中で間違えた/あいまいな点を整理しました。
よろしければ、ご参考にしてください。

http://shiguregaki.hatenablog.com/entry/p51shiguregaki.hatenablog.com



(再掲)勉強方法:4ステップ

以下の4ステップで合格を目指します。

ステップ1:知識詰め込み

(全文PDF・単語帳アプリ付) 徹底攻略 ネットワークスペシャリスト教科書 平成29年度を読んで、ネットワークの知識を蓄えます。
ここでわからないことがあったら、ネットで検索をかけて分からないことを解消します。
1回読んでも覚えられないので、何度も繰り返すことに意味があります。ステップ1ではなるべく時間をかけず、ステップ2以降の問題演習で不明点が出たら、このテキストに戻って復習しなおすことで知識を定着したいと思います。


ステップ2:過去問題を解く

午前問題は同じ問題がでることが多いとのことなので、少なくとも3年分、多くて6年分を解いて、知識を定着できればいいと思います。
ここら辺は実際に解いてみて、午前I,IIで80点くらいとれるくらいまでできたら午前問題はクリアでよいと思います。

午後問題は文章問題になるため、解くためのポイントが必要になるようです。
そのためネットワークスペシャリストの問題の特性を理解するため、「ネスぺの~」の3冊を解くことで過去3年分の午後I,IIの問題演習を行います。
ここで解き方のポイントや知識の再復習を行って、さらなる知識の定着を図ります。



ステップ3:午後I,IIに関してはさらに過去問題を解く

午後I,IIの解き方のポイントは知識というより経験としてこなすほうがよいと考え、たくさん問題を解くことで経験値を得ようと考えました。
具体的には、「ネスぺの~」の3冊は過去3年分のため、それ以前の過去4年前のものを順に解いていこうと考えています。
(全文PDF・単語帳アプリ付) 徹底攻略 ネットワークスペシャリスト教科書 平成29年度には過去6年分の過去問が収録されているのでそれを解こうと思います。
また、過去問自体はIPAのサイトにもあるので、必要あればさらに過去にさかのぼって問題演習をしたいと思います。
IPAが以下のURLで過去問を掲示しています。

https://www.jitec.ipa.go.jp/1_04hanni_sukiru/_index_mondai.html


ステップ4:前日に問題集を一気に読み直す

再度テキストや問題集を読み直します。
ここは流し読みで、知識を総まとめさせるためです。これによって当日への知識の積み込みを行います。
個人的にはこれを行うことでかなり知識が整理できて、当日はステップ3の模擬試験よりも実力が出せます。




まとめ

事前に計画したスケジュール通りにはぜんぜん行きませんでした。。。
どうにか午前I,IIは合格水準まで到達しましたが、時間を使いすぎてしまった感があります。
高度試験の肝は午後問題だと思うので、残りは午後問題対策に重点を置いて勉強をしたいと思います。

f:id:shiguregaki:20170903005328j:plain

以上!

【投稿アプリ自作(6)】seederでダミーデータの作成(Laravel)

f:id:shiguregaki:20170731072123j:plain
Webアプリを自作するためにPHPフレームワークのLaravelを導入することに決めました。
PHP初心者かつLaravel初心者ですが、自分なりにスキルを得るためにLaravelを用いた記事投稿アプリを自作しました。その過程を備忘録としてまとめます。
最終的にはブラウザを利用して記事投稿画面の表示、ユーザごとの記事投稿数のグラフ化を目指したいと思います。
本記事は連載【投稿アプリ自作】の第六回目で、Seederでダミーデータを作成する方法をまとめます。
※:Laravelは5.3からファイル構成が大幅に変わりました。本記事ではLaravel5.3以降を使って説明したいと思います。
※2:データベースはXAMPPに入っていたMySQLを使うことにします。事前にデータベースアカウントを登録しておいてください。

目次

ゴール

本記事では、以下の2つについてまとめます。
・Seederファイルの変更
・Sedderを実行してダミーデータの作成

以下の画像ではSeederによって第四回目で設計したDetailedArticlesテーブルにダミーデータを作成しました。
その他のテーブルにも同様にダミーデータを作成することを目指します。

f:id:shiguregaki:20170731072144j:plain

必要なもの

必要なもの 価格(円)
1 PC ピンキリ
備考 インターネット接続可能なこと
2 XAMPP 無料
備考 持っていない場合は、こちらを参照→
XAMPPのインストール方法 - しぐれがき
3 Composer 無料
備考 持っていない場合は、こちらを参照→
Composerのインストール - しぐれがき
4 Laravelフレームワーク 無料
備考 インストールしていない場合は、こちらを参照→
最近話題のPHPフレームワーク『Laravel5』をインストールする! - しぐれがき
5 MySQLのデータベースアカウント 無料
備考 持っていない場合は、こちらを参照→
phpMyAdminでデータベースとユーザを新規登録する - しぐれがき
6 投稿アプリ向けのテーブル 無料
備考 【投稿アプリ自作】の第四回目で作成した投稿アプリ向けのテーブルです。持っていない場合は、こちらを参照→【投稿アプリ自作(4)】テーブル設計とマイグレーション実行(Laravel) - しぐれがき




事前準備

テーブルの作成

事前に投稿アプリ向けのテーブルを用意する必要があります。
第四回目でテーブル設計と新規テーブルの作成方法をまとめていますので、まだ作成していない方は以下の記事を参考にして新規テーブルの作成をしてください。

shiguregaki.hatenablog.com



テーブルの関連性

投稿アプリ向けのテーブルの関連性をER図にまとめると下の様になります。(IDEDF1X記法で記述)
※ネットで検索しながら見よう見まねで書いたので間違っているかもしれませんがご容赦ください。

f:id:shiguregaki:20170731072203j:plain




ダミーデータの設計

Seederの機能を使ってダミーデータを作成していくのですが、実際の中身は何を使うのかはこちらで決定しないといけません。
この章では以下の各テーブルのダミーデータを設計します。
・Articlesテーブル
・DetailedArticlesテーブル
・ArticleUsersテーブル
・Categoriesテーブル
・Tagsテーブル


Articlesテーブルのダミーデータの設計

Articlesテーブルのカラムは【投稿アプリ自作】の第四回目で以下の様に設計しました。

Articlesテーブル
記事を管理するテーブルです。各記事はユーザやカテゴリー、タグを紐づけられています。

カラム名 変数名 補足
記事ID article_id 主キー
ユーザID user_id 外部キー
ユーザごとの記事ID user_article_id
カテゴリーID category_id 外部キー
タグID tag_id 外部キー





Articlesテーブルのダミーデータ
このテーブルはIDばかりでその他のテーブルの紐づけに使用します。
ダミーデータは以下の様にしたいと思います。

記事ID ユーザID ユーザごとの記事ID カテゴリーID タグID
11111
21223
32111
41322
53146
63235
71435
82234
93335
102334
111511
123422
133535
142434
151611
162524
173611
183711
192623
201711



DetailedArticlesテーブルのダミーデータの設計

DetailedArticlesテーブルのカラムは【投稿アプリ自作】の第四回目で以下の様に設計しました。

DetailedArticlesテーブル
記事詳細を管理するテーブルです。Articlesテーブルとarticle_idで1:1に関連を持っています。

カラム名 変数名 補足
記事ID article_id 主キー 外部キー
タイトル title
記事内容 body
投稿日 published_date






DetailedArticlesテーブルのダミーデータ
このテーブルはタイトルや内容など記事の具体的な内容を格納します。
ダミーデータは以下の様にしたいと思います。

記事ID タイトル 内容 投稿日
1自己紹介!はじめまして、ケンです。よろしく!2017-04-01
2おすすめイタリアン!このイタリア料理店おすすめです!2017-04-01
3自己紹介ですこんにちは、エミリーです。よろしくです。2017-04-01
4おすすめ和食この和食屋もおすすめです!ぜひ!2017-04-01
5北海道旅行今日は北海道にいます。寒い。。。2017-04-01
6最近の仕事仕事で外回り多い。明日は仕事で沖縄だ2017-04-01
7つぶやき今からバイトだ。支度しなきゃ!2017-04-01
8友人の結婚式明日は友達の結婚式だわ!2017-04-02
9移動中です沖縄行の飛行機のなか。ハードだぜ!2017-04-02
10お祝儀について友人のお祝儀は3萬でいいよね?2017-04-02
11沖縄旅行に出発今から沖縄旅行にいってきます!2017-04-02
12沖縄めし沖縄に到着。飯がうまいぜ2017-04-02
13沖縄堪能します仕事はさっさと片付けて沖縄堪能するぞ2017-04-03
14友人の結婚式ドレスがきれいだわ2017-04-03
15やばい財布落とした!!!2017-04-03
16結婚式のごはん結婚式場のごはんっておいしいですよね2017-04-03
17どうしよう財布を拾ってしまった。。。2017-04-03
18交番とりあえず、拾った財布は交番に届けた2017-04-03
19結婚式の二次会おしゃれなイタリアレストランにて2017-04-03
20財布ありました近くの交番に届けられてた。よかったあ2017-04-03



ArticleUsersテーブルのダミーデータの設計

Articlesテーブルのカラムは【投稿アプリ自作】の第四回目で以下の様に設計しました。

ArticleUsersテーブル
記事を書くユーザを管理するテーブルです。Articlesテーブルとuser_idで1:多に関連を持っています。

カラム名 変数名 補足
ユーザID user_id 主キー
ユーザ名 user_name
パスワード password
性別 gender
メールアドレス mail_address






ArticleUsersテーブルのダミーデータ
このテーブルは記事アプリを利用するユーザの情報を格納します。
ダミーデータは以下の様にしたいと思います。

ユーザID ユーザ名 パスワード 性別 メールアドレス
1ケンken12345k-e-n-0123@ken.com
2エメリーemily111e-mi-ly-111@emy.com
3ボブbobbob3boooob123@bob.com



Categoriesテーブルのダミーデータの設計

Categoriesテーブルのカラムは【投稿アプリ自作】の第四回目で以下の様に設計しました。

Categoriesテーブル
記事のカテゴリーを管理するテーブルです。Articlesテーブルとcategory_idで1:多に関連を持っています。

カラム名 変数名 補足
カテゴリーID category_id 主キー
カテゴリー名 category_name






Categoriesテーブルのダミーデータ
カテゴリーテーブルは記事のカテゴリーをまとめています。
ダミーデータは以下の様にしたいと思います。

カテゴリーID カテゴリー名
1カテゴリーなし
2食と酒
3暮らしと生活
4旅行




Tagsテーブルのダミーデータの設計

Tagsテーブルのカラムは【投稿アプリ自作】の第四回目で以下の様に設計しました。

Tagsテーブル
記事のタグを管理するテーブルです。Articlesテーブルとtag_idで1:多に関連を持っています。

カラム名 変数名 補足
タグID tag_id 主キー
タグ名 tag_name






Tagsテーブルのダミーデータ
タグテーブルは記事のタグをまとめています。
ダミーデータは以下の様にしたいと思います。

タグID タグ名
1タグなし
2和食
3イタリアン
4冠婚葬祭
5仕事
6北海道
7沖縄





Laravelソースファイルの変更

変更や新規作成するLaravelファイル一覧

Laravelのプロジェクトファイル配下にあるファイルで本記事の中で変更、新規作成するファイルについてまとめました。

ファイル名 対応 備考
1
database/seeds/DatabaseSeeder.php
変更
2
database/seeds/seed/Articles.csv
新規作成 database/seeds/seedディレクトリも新規作成
3
database/seeds/seed/ArticleUser.csv
新規作成 同上
4
database/seeds/seed/Categories.csv
新規作成 同上
5
database/seeds/seed/DetailedArticles.csv
新規作成 同上
6
database/seeds/seed/Tags.csv
新規作成 同上




Seederファイルの変更

まずはSeederファイルを変更します。
Seederファイルは以下のディレクトリに格納されています。

Seederファイルの格納ディレクトdatabase/seeds/

ここに格納されたDatabaseSeeder.phpがSeederファイルになります。
このファイルに各テーブルにダミーデータを格納するように処理を追加します。
また、各ダミーデータはcsvから読み取るようにします。csvの内容については後述します。

DatabaseSeeder.phpを以下の様に変更します。
※このとき$this->call(で呼び出す関数の順番には外部キー制約がついているため注意が必要です。
具体的にはArticleUsersテーブル/Categoriesテーブル/Tagsテーブル => Articlesテーブル => DetailedArticlesテーブル の順番で実行する必要があります。

<?php

use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
use Carbon\Carbon;
use App\ArticleUser;
use App\Category;
use App\Tag;
use App\DetailedArticle;
use App\Article;

class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        Model::unguard();
        $this->call(ArticleUsersTableSeeder::class);
        $this->call(CategoriesTableSeeder::class);
        $this->call(TagsTableSeeder::class);
        $this->call(ArticlesTableSeeder::class);
        $this->call(DetailedArticlesTableSeeder::class);
        Model::reguard();
    }
}
class ArticleUsersTableSeeder extends Seeder
{
    public function run()
    {
        DB::table('article_users')->delete();

        $filepath="E:\\xampp\\htdocs\\article-test-apl\\database\\seeds\\seed\\ArticleUser.csv";
        $file = new SplFileObject($filepath); 
        $file->setFlags(SplFileObject::READ_CSV);

        foreach ($file as $line) {
            if(is_null($line[0])){
                continue;
            }else{
                ArticleUser::create([
                    'user_name' => $line[1],
                    'password' => $line[2],
                    'gender' => $line[3],
                    'mail_address' => $line[4]
                ]);
            }
        }
    }
}
class CategoriesTableSeeder extends Seeder
{
    public function run()
    {
        DB::table('categories')->delete();

        $filepath="E:\\xampp\\htdocs\\article-test-apl\\database\\seeds\\seed\\Categories.csv";
        $file = new SplFileObject($filepath); 
        $file->setFlags(SplFileObject::READ_CSV);

        foreach ($file as $line) {
            if(is_null($line[0])){
                continue;
            }else{
                Category::create([
                    'category_name' => $line[1]
                ]);
            }
        }
    }
}
class TagsTableSeeder extends Seeder
{
    public function run()
    {
        DB::table('tags')->delete();

        $filepath="E:\\xampp\\htdocs\\article-test-apl\\database\\seeds\\seed\\Tags.csv";
        $file = new SplFileObject($filepath); 
        $file->setFlags(SplFileObject::READ_CSV);

        foreach ($file as $line) {
            if(is_null($line[0])){
                continue;
            }else{
                Tag::create([
                    'tag_name' => $line[1]
                ]);
            }
        }
    }
}
class DetailedArticlesTableSeeder extends Seeder
{
    public function run()
    {
        DB::table('detailed_articles')->delete();

        $filepath="E:\\xampp\\htdocs\\article-test-apl\\database\\seeds\\seed\\DetailedArticles.csv";
        $file = new SplFileObject($filepath); 
        $file->setFlags(SplFileObject::READ_CSV);

        foreach ($file as $line) {
            if(is_null($line[0])){
                continue;
            }else{
                DetailedArticle::create([
                    'article_id' => $line[0],
                    'title' => $line[1],
                    'body' => $line[2],
                    'published_date' => date("Y-m-d 10:00:00",strtotime($line[3]))
                ]);
            }
        }
    }
}
class ArticlesTableSeeder extends Seeder
{
    public function run()
    {
        DB::table('articles')->delete();

        $filepath="E:\\xampp\\htdocs\\article-test-apl\\database\\seeds\\seed\\Articles.csv";
        $file = new SplFileObject($filepath); 
        $file->setFlags(SplFileObject::READ_CSV);

        foreach ($file as $line) {
            if(is_null($line[0])){
                continue;
            }else{
                Article::create([
                    'user_id' => $line[1],
                    'user_article_id' => $line[2],
                    'category_id' => $line[3],
                    'tag_id' => $line[4]
                ]);
            }
        }
    }
}






csvファイルの新規作成

上で変更したDatabaseSeeder.php内ではcsvファイルを読みだしてダミーデータを設定しています。
本章ではそのcsvファイルについてまとめます。

csvファイルは下記ディレクトリに格納してます。

csvファイルの格納ディレクトdatabase/seeds/seed/






それぞれの内容については下記です。

Articles.csv




1,1,1,1,1
2,1,2,2,3
3,2,1,1,1
4,1,3,2,2
5,3,1,4,6
6,3,2,3,5
7,1,4,3,5
8,2,2,3,4
9,3,3,3,5
10,2,3,3,4
11,1,5,1,1
12,3,4,2,2
13,3,5,3,5
14,2,4,3,4
15,1,6,1,1
16,2,5,2,4
17,3,6,1,1
18,3,7,1,1
19,2,6,2,3
20,1,7,1,1



ArticleUser.csv




1,ケン,ken12345,男,k-e-n-0123@ken.com
2,エミリー,emily111,女,e-mi-ly-111@emy.com
3,ボブ,bobbob3,男,boooob123@bob.com



Categories.csv




1,カテゴリーなし
2,食と酒
3,暮らしと生活
4,旅行



DetailedArticles.csv




1,自己紹介!,はじめまして、ケンです。よろしく!,2017-04-01
2,おすすめイタリアン!,このイタリア料理店おすすめです!,2017-04-01
3,自己紹介です,こんにちは、エミリーです。よろしくです。,2017-04-01
4,おすすめ和食,この和食屋もおすすめです!ぜひ!,2017-04-01
5,北海道旅行,今日は北海道にいます。寒い。。。,2017-04-01
6,最近の仕事,仕事で外回り多い。明日は仕事で沖縄だ,2017-04-01
7,つぶやき,今からバイトだ。支度しなきゃ!,2017-04-01
8,友人の結婚式,明日は友達の結婚式だわ!,2017-04-02
9,移動中です,沖縄行の飛行機のなか。ハードだぜ!,2017-04-02
10,お祝儀について,友人のお祝儀は3萬でいいよね?,2017-04-02
11,沖縄旅行に出発,今から沖縄旅行にいってきます!,2017-04-02
12,沖縄めし,沖縄に到着。飯がうまいぜ,2017-04-02
13,沖縄堪能します,仕事はさっさと片付けて沖縄堪能するぞ,2017-04-03
14,友人の結婚式,ドレスがきれいだわ,2017-04-03
15,やばい,財布落とした!!!,2017-04-03
16,結婚式のごはん,結婚式場のごはんっておいしいですよね,2017-04-03
17,どうしよう,財布を拾ってしまった。。。,2017-04-03
18,交番,とりあえず、拾った財布は交番に届けた,2017-04-03
19,結婚式の二次会,おしゃれなイタリアレストランにて,2017-04-03
20,財布ありました,近くの交番に届けられてた。よかったあ,2017-04-03



Tags.csv




1,タグなし
2,和食
3,イタリアン
4,冠婚葬祭
5,仕事
6,北海道
7,沖縄




Seederの実行

Seederを実行するにはコマンドプロンプトで以下のコマンドを入力します。


 Seeder実行コマンド 
>php artisan db:seed

f:id:shiguregaki:20170731072219j:plain




データベースの確認

データベースが正しく作成されているか確認するため、phpMyAdminにアクセスします。
ブラウザでphpMyAdmin(以下のURL)にアクセスしてください。

phpMyAdminのアクセス先http://localhost/phpmyadmin

今回の記事で以下の5つのテーブルについてダミーデータを設定したのでそれぞれ確認してきます。
・articles(Articlesテーブル)
・detatiled_articles(DetatiledArticlesテーブル)
・article_users(ArticleUsersテーブル)
・categories(Categoriesテーブル)
・tags(Tagsテーブル)





Articlesテーブルの確認

phpMyAdminの左側にあるメニューでarticles(Articlesテーブル)を選択します。
するとダミーデータの章で設計したデータが格納されていることが分かります。

f:id:shiguregaki:20170731072230j:plain




DetatiledArticlesテーブルの確認

phpMyAdminの左側にあるメニューでdetailed_articles(DetatiledArticlesテーブル)を選択します。
するとダミーデータの章で設計したデータが格納されていることが分かります。

f:id:shiguregaki:20170731072240j:plain




ArticleUsersテーブルの確認

phpMyAdminの左側にあるメニューでarticle_users(ArticleUsersテーブル)を選択します。
するとダミーデータの章で設計したデータが格納されていることが分かります。

f:id:shiguregaki:20170731072250j:plain





Categoriesテーブルの確認

phpMyAdminの左側にあるメニューでcategories(Categoriesテーブル)を選択します。
するとダミーデータの章で設計したデータが格納されていることが分かります。

f:id:shiguregaki:20170731072259j:plain




Tagsテーブルの確認

phpMyAdminの左側にあるメニューでtags(Tagsテーブル)を選択します。
するとダミーデータの章で設計したデータが格納されていることが分かります。

f:id:shiguregaki:20170731072308j:plain

これで設計した通りにダミーデータを作成することができました。

まとめ

この記事では以下の2つについてまとめました。
・Seederファイルの変更
・Sedderを実行してダミーデータの作成

これでダミーデータを作成することができたので、コントローラでデータベースにアクセスしてデータを取得することができます。
ですので、次回は記事を操作するコントローラー(ArticleController.php)を変更して、ダミーデータにアクセスしたいと思います。



次回記事

次回記事はコントローラでデータベースにアクセスし、ダミーデータを画面上に表示する方法についてまとめたいと思います。

http://shiguregaki.hatenablog.com/entry/p48shiguregaki.hatenablog.com




前回記事

shiguregaki.hatenablog.com



以上!

ネットワークスペシャリストを3ヶ月で合格! に向けて (1)

f:id:shiguregaki:20170731071448j:plain
こんにちは、しぐれがきです。

サーバ開発においてネットワークの仕組みを理解しているのは重要だと思い、2017年度秋に開催されるネットワークスペシャリストを受験することにしました。
しぐれがきとしては初めてのITスキル標準レベル最上位のレベル4の資格であり、本当に取れるのか不安ではありますが。。。

このブログでは、ネスぺ合格に向けてしぐれがきが使う教材の紹介と、勉強スケジュールの計画を立てたいと思います。
本記事がネスぺ受験を検討している人、同じく合格に向けて頑張っている人の参考になればうれしいです。

目次

資格概要

資格情報

資格名

IPA 情報処理推進機構 ネットワークスペシャリスト試験

www.ipa.go.jp




概要

ネットワークの固有技術からサービス動向まで幅広く精通し、目的に適合した大規模かつ堅牢なネットワークシステムを構築し運用できるネットワークエンジニアやインフラ系エンジニアを目指す方に最適です。
(IPAのネスぺページから引用 IPA 独立行政法人 情報処理推進機構:制度の概要:ネットワークスペシャリスト試験)




レベル

ITスキル標準ITSS):レベル4




試験情報

受験料金

5,700 円(税込)

インターネットでの受験申込では以下の支払い方法が選択可能
・クレジットカード決済
ペイジーPay-easy)による払込み
・コンビニ利用による払込み



受験方法

情報処理試験が開催される特定の試験会場にて一斉受験
試験地は各地にあり(試験地については以下のIPAのサイト参照)

IPA 独立行政法人 情報処理推進機構:試験実施案内:試験地一覧




試験内容

試験時間 出題形式 解答数/出題数
午前I 9:30~10:20
(50分)
多肢選択式
(四肢択一)
30問/30問
午前II 10:50~11:30
(40分)
多肢選択式
(四肢択一)
25問/25問
午後I 12:30~14:00
(90分)
記述式 2問/3問
午後II 14:30~16:30
(120分)
記述式 1問/2問



合格条件

合格ライン
午前I 60点/100満点中(18問/30問中正解)
午前II 60点/100満点中(15問/25問中正解)
午後I 60点/100満点中
午後II 60点/100満点中



合格率

H28年度 15.4%




教材紹介

午前はネットワーク以外にも一般的な知識を解いてくる問題で、午後はネットワークに焦点を当てた問題となるようなので、午前と午後それぞれ対策することにしました。
以下ではそれぞれの対策で使用した教材を紹介したいと思います。

午前対策

午前対策に使用したテキストは以下の1冊のみです。

1.(全文PDF・単語帳アプリ付) 徹底攻略 ネットワークスペシャリスト教科書 平成29年度


本情報

■タイトル
(全文PDF・単語帳アプリ付) 徹底攻略 ネットワークスペシャリスト教科書 平成29年度

■価格(2017/7/30現在)
3,002円

■著者
株式会社わくわくスタディワールド 瀬戸美月 (著)

■ページ数
632ページ

■章構成
第1章 ネットワーク基礎知識
1-1 ネットワークとは
1-2 ITインフラ
1-3 演習問題
第2章 ネットワークインタフェース層
2-1 データリンク
2-2 LAN間接続
2-3 通信サービス
2-4 演習問題
第3章 インターネット層
3-1 IP
3-2 ルーティング
3-3 演習問題
第4章 トランスポート層
4-1 トランスポート層の役割
4-2 TCPUDP
4-3 演習問題
第5章 アプリケーション層
5-1 Web関連のプロトコル
5-2 メール関連のプロトコル
5-3 アドレス・名前解決
5-4 その他のプロトコル
5-5 演習問題
第6章 セキュリティ
6-1 情報セキュリティマネジメント
6-2 セキュリティ技術
6-3 セキュリティプロトコル
6-4 演習問題
第7章 ネットワーク設計
7-1 ネットワーク設計
7-2 通信に関する技術や計算
7-3 演習問題
第8章 運用管理
8-1 ネットワーク運用管理
8-2 演習問題
第9章 仮想ネットワーク
9-1 仮想化
9-2 ストレージ
9-3 仮想ネットワーク
9-4 演習問題

付録 平成28年度秋期 過去問題解説

■詳細

内容

ネットワークの基本知識となる部分の勉強に使えるテキストだと思います。
随所に図や絵もあり、イメージ的にも理解しやすいです。
また、このテキストには過去6回分の過去問題とその解説がつくとのことだったので、過去問題集としても利用することができます。

私はこのテキストを使って、ネットワークの基本となる知識をつけるとともに、過去問題の特に午前I,IIの解説に利用しようとしています。

その他の午前問題のテキストについて

午前I,IIはネットワークというよりかは情報処理の基本的知識を問われるようなので、上で紹介したテキストのみでは足りないかもしれません。
私は上で紹介したテキストと過去問をひたすら解くことで知識を得ようと考えています。
しかしネットで調べた限りでは、午前I,IIは過去問と同問題もしくはかなり近い内容の問題の出題が多いようです。
そのため、午前I,II専用のテキストの勉強を検討してもよいかもしれません。
この章では、午前対策としてオススメのテキストを紹介します。
1.情報処理教科書 高度試験午前I・II 2017年版

このテキストはネットワークスペシャリスト以外の高度試験も含めたテキストです。
本屋で軽く確認しましたが、高度試験として共通の問題、ネットワークスペシャリストとしての問題とわかりやすくまとまっており、高度試験共通のテキストとしても、気にせず使いやすそうと感じました。
amazonでも評価が良く、私の本屋でもかなりプッシュされていました。

2.ネットワークスペシャリスト 午前 試験問題集 第2版 (合格精選500題)

このテキストは「質より量」、とにかくたくさんの過去問を解け!っていう感じのイメージでいくつかのネットワーク機能を分類して、それぞれに対してたくさんの過去問とその解説がまとめられています。
amazonの評価では、重複する問題や間違いがあるそうですが、それでもかなり良本と紹介されていました。

午後対策

午後対策に使用したテキストは以下の3冊および過去問用に午前で使用した(全文PDF・単語帳アプリ付) 徹底攻略 ネットワークスペシャリスト教科書 平成29年度を考えています。

1.ネスペ 27 礎 -ネットワークスペシャリストの最も詳しい過去問解説 (情報処理技術者試験)

2.ネスペ 26 道 -ネットワークスペシャリストの最も詳しい過去問解説 (情報処理技術者試験)

3.ネスぺの剣25 ~ネットワークスペシャリストの最も詳しい過去問解説 (情報処理技術者試験)



ネスペ 27 礎 -ネットワークスペシャリストの最も詳しい過去問解説 (情報処理技術者試験)


■タイトル
ネスペ 27 礎 -ネットワークスペシャリストの最も詳しい過去問解説 (情報処理技術者試験)

■価格(2017/7/30現在)
2,570円

■著者
左門 至峰 (著), 平田 賀一 (著), 山内 大史 (著), 幸田 廣信 (著)

■ページ数
312ページ

■章構成
第1章 本書の使い方
第2章 過去問解説平成27年度午後1
第3章 過去問解説平成27年度午後2
第4章 参考解説
第5章 ネット犯罪の犯人を追え

■詳細


ネスペ 26 道 -ネットワークスペシャリストの最も詳しい過去問解説 (情報処理技術者試験)


■タイトル
ネスペ 26 道 -ネットワークスペシャリストの最も詳しい過去問解説 (情報処理技術者試験)

■価格(2017/7/30現在)
2,570円

■著者
左門 至峰 (著), 平田 賀一 (著)

■ページ数
352ページ

■章構成
第1章 本書の使い方と実力アップ!問題演習
第2章 過去問解説平成26年度午後1
第3章 過去問解説平成26年度午後2
第4章 参考解説(FWの冗長化とHA機能について
VoIPの基礎知識)
第5章 ネスペの意義と勉強法―もし100万円でネスペ資格が売られているとしたら、あなたは買いますか?

■詳細


ネスぺの剣25 ~ネットワークスペシャリストの最も詳しい過去問解説 (情報処理技術者試験)


■タイトル
ネスぺの剣25 ~ネットワークスペシャリストの最も詳しい過去問解説 (情報処理技術者試験)

■価格(2017/7/30現在)
2,462円

■著者
左門 至峰 (著), 平田 賀一 (著)

■ページ数
328ページ


■詳細



勉強方法

本章ではネットワークスペシャリスト合格に向けてしぐれがきが実践しようとしている勉強方法を紹介したいと思います。
以下の4ステップで勉強を進めたいと思います。


勉強方法:4ステップ

ステップ1:知識詰め込み

(全文PDF・単語帳アプリ付) 徹底攻略 ネットワークスペシャリスト教科書 平成29年度を読んで、ネットワークの知識を蓄えます。
ここでわからないことがあったら、ネットで検索をかけて分からないことを解消します。
1回読んでも覚えられないので、何度も繰り返すことに意味があります。ステップ1ではなるべく時間をかけず、ステップ2以降の問題演習で不明点が出たら、このテキストに戻って復習しなおすことで知識を定着したいと思います。


ステップ2:過去問題を解く

午前問題は同じ問題がでることが多いとのことなので、少なくとも3年分、多くて6年分を解いて、知識を定着できればいいと思います。
ここら辺は実際に解いてみて、午前I,IIで80点くらいとれるくらいまでできたら午前問題はクリアでよいと思います。

午後問題は文章問題になるため、解くためのポイントが必要になるようです。
そのためネットワークスペシャリストの問題の特性を理解するため、「ネスぺの~」の3冊を解くことで過去3年分の午後I,IIの問題演習を行います。
ここで解き方のポイントや知識の再復習を行って、さらなる知識の定着を図ります。



ステップ3:午後I,IIに関してはさらに過去問題を解く

午後I,IIの解き方のポイントは知識というより経験としてこなすほうがよいと考え、たくさん問題を解くことで経験値を得ようと考えました。
具体的には、「ネスぺの~」の3冊は過去3年分のため、それ以前の過去4年前のものを順に解いていこうと考えています。
(全文PDF・単語帳アプリ付) 徹底攻略 ネットワークスペシャリスト教科書 平成29年度には過去6年分の過去問が収録されているのでそれを解こうと思います。
また、過去問自体はIPAのサイトにもあるので、必要あればさらに過去にさかのぼって問題演習をしたいと思います。
IPAが以下のURLで過去問を掲示しています。

IPA 独立行政法人 情報処理推進機構:過去問題



ステップ4:前日に問題集を一気に読み直す

再度テキストや問題集を読み直します。
ここは流し読みで、知識を総まとめさせるためです。これによって当日への知識の積み込みを行います。
個人的にはこれを行うことでかなり知識が整理できて、当日はステップ3の模擬試験よりも実力が出せます。



勉強スケジュール

ブログのタイトルで記載した通り、目標は3ヶ月取得です!
といっても、正確にはすでに3か月はないのですが。。。

以下のスケジュールで上で紹介した4ステップを進めていこうと思います。

日程 ステップ
2017/7/31(月)-8/4(金) ステップ1
2017/8/5(土)-8/27(日) ステップ2(午前I,II)
2017/8/7(月)-8/20(日) ステップ2(ネスぺの礎)
2017/8/21(月)-9/3(日) ステップ2(ネスぺの道)
2017/9/4(月)-9/17(日) ステップ2(ネスぺの剣)
2017/9/18(月)-10/13(金) ステップ3
2017/10/14(土) ステップ4
2017/10/15(日) 試験日

上記のスケジュールに従って勉強を進めていきたいと思います。
ところどころのポイントで進捗日記がかければいいと思います。


以上!

【投稿アプリ自作(5)】モデルファイルの設定(Laravel)

f:id:shiguregaki:20170708103729j:plain
Webアプリを自作するためにPHPフレームワークのLaravelを導入することに決めました。
PHP初心者かつLaravel初心者ですが、自分なりにスキルを得るためにLaravelを用いた記事投稿アプリを自作しました。その過程を備忘録としてまとめます。
最終的にはブラウザを利用して記事投稿画面の表示、ユーザごとの記事投稿数のグラフ化を目指したいと思います。
本記事は連載【投稿アプリ自作】の第五回目で、モデルファイルとデータベースを紐づけるための設定内容をまとめます。
※:Laravelは5.3からファイル構成が大幅に変わりました。本記事ではLaravel5.3以降を使って説明したいと思います。
※2:データベースはXAMPPに入っていたMySQLを使うことにします。事前にデータベースアカウントを登録しておいてください。

目次

ゴール

本記事では、前回で新規作成したモデルファイルに修正を加えて、テーブルにアクセスできるようにします。
・ArticleUser.php
・Category.php
・Tag.php
・Article.php
・DetailedArticle.php

必要なもの

必要なもの 価格(円)
1 PC ピンキリ
備考 インターネット接続可能なこと
2 XAMPP 無料
備考 持っていない場合は、こちらを参照→XAMPPのインストール方法
3 Composer 無料
備考 持っていない場合は、こちらを参照→Composerのインストール方法
4 Laravelフレームワーク 無料
備考 インストールしていない場合は、こちらを参照→Laravelのインストール方法
5 MySQLのデータベースアカウント 無料
備考 持っていない場合は、こちらを参照→phpMyAdminでデータベースとユーザを新規登録する
6 投稿アプリのモデルファイル 無料
備考 前回の記事で作成したモデルファイルです。持っていない場合は、こちらを参照→【投稿アプリ自作(4)】テーブル設計とマイグレーション実行(Laravel)




Laravelソースファイルの変更

変更や新規作成するLaravelファイル一覧

Laravelのプロジェクトファイル配下にあるファイルで本記事の中で変更、新規作成するファイルについてまとめました。

ファイル名 対応 備考
1 app/Article_User.php 変更
2 app/Category.php 変更
3 app/Tag.php 変更
4 app/Article.php 変更
5 app/Detailed_Article.php 変更




ArticleUsersテーブルのモデルファイルの変更

前回マイグレーションファイルで作成したArticleUsersテーブルとモデルファイルを紐づけます。
前回作成したxxxx_xx_xx_xxxxxx_create_article_users_table.phpを見直してみると

Schema::create('article_users', function (Blueprint $table) {
となっています。ここの赤字部分がこのArticleUsersテーブルのテーブル名を示す変数名になります。
このテーブル名をArticleUsersテーブルのモデルファイルを紐づけるために以下の様にArticleUser.phpファイルを変更します。

<?php
 
namespace App;
 
use Illuminate\Database\Eloquent\Model;
 
class ArticleUser extends Model
{
    protected $table = 'article_users';
}


protected $table = 'article_users';でモデルファイルとテーブルを紐づけることができます。




Categorysテーブルのモデルファイルの変更

ArticleUsersテーブルと同様にCategorysテーブルの変数名とモデルファイルを紐づけていきます。
Category.phpファイルを以下の様に変更します。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    protected $table = 'categories';
}




Tagsテーブルのモデルファイルの変更

ArticleUsersテーブルと同様にTagsテーブルの変数名とモデルファイルを紐づけていきます。
Tag.phpファイルを以下の様に変更します。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Tag extends Model
{
    protected $table = 'tags';
}





Articlesテーブルのモデルファイルの変更

ArticleUsersテーブルと同様にArticlesテーブルの変数名とモデルファイルを紐づけていきます。
Article.phpファイルを以下の様に変更します。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Article extends Model
{
    protected $table = 'articles';
}




DetailedArticlesテーブルのモデルファイルの変更

ArticleUsersテーブルと同様にDetailedArticlesテーブルの変数名とモデルファイルを紐づけていきます。
DetailedArticle.phpファイルを以下の様に変更します。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class DetailedArticle extends Model
{
    protected $table = 'detailed_articles';
}

これですべてのモデルファイルとテーブルを紐づけられました。





まとめ

今回はモデルファイルとテーブルの紐づけを行いました。
これでコントローラーでデータベースを宣言することでデータベースの値を取得することができるようになります。
しかし、現状はデータベースの中身が一つもありません。データベースの確認をするためにはこのままでは使えません。
そのため、次回ではseederというダミーデータを作成する機能を使ってダミーデータを作成し、その後データベースの操作の確認をして行くことにします。



次回記事

次回記事はseederを使ってダミーデータを作成方法についてまとめたいと思います。


http://shiguregaki.hatenablog.com/entry/p46shiguregaki.hatenablog.com




前回記事

shiguregaki.hatenablog.com


以上!

【投稿アプリ自作(4)】テーブル設計とマイグレーション実行(Laravel)

f:id:shiguregaki:20170708104151j:plain
Webアプリを自作するためにPHPフレームワークのLaravelを導入することに決めました。
PHP初心者かつLaravel初心者ですが、自分なりにスキルを得るためにLaravelを用いた記事投稿アプリを自作しました。その過程を備忘録としてまとめます。
最終的にはブラウザを利用して記事投稿画面の表示、ユーザごとの記事投稿数のグラフ化を目指したいと思います。
本記事は連載【投稿アプリ自作】の第四回目で、投稿アプリのテーブル設計に基づいてマイグレーションファイルを作成し、実行することで、投稿アプリに使用するテーブルの生成をする過程をまとめます。
※:Laravelは5.3からファイル構成が大幅に変わりました。本記事ではLaravel5.3以降を使って説明したいと思います。
※2:データベースはXAMPPに入っていたMySQLを使うことにします。事前にデータベースアカウントを登録しておいてください。

目次

ゴール

本記事では、以下の2つを目指します。
・テーブル設計に基づいてマイグレーションファイルを作成する
マイグレーションを実行することで、投稿アプリに使用する新規テーブルを作成する

f:id:shiguregaki:20170708104204j:plain

必要なもの

必要なもの 価格(円)
1 PC ピンキリ
備考 インターネット接続可能なこと
2 XAMPP 無料
備考 持っていない場合は、こちらを参照→XAMPPのインストール方法
3 Composer 無料
備考 持っていない場合は、こちらを参照→Composerのインストール方法
4 Laravelフレームワーク 無料
備考 インストールしていない場合は、こちらを参照→Laravelのインストール方法
5 MySQLのデータベースアカウント 無料
備考 持っていない場合は、こちらを参照→phpMyAdminでデータベースとユーザを新規登録する




事前準備

XAMPPでApacheMySQLを起動!

データベースの設定をするために、ApacheMySQLを起動します。

f:id:shiguregaki:20170708104219j:plain



データベースの準備

データベースにアクセスるため、MySQLのデータベースおよびユーザを新規作成します。
以下にphpMyAdminを使ってMySQLのデータベース、ユーザを新規作成する方法をまとめました。
ご参考にしてください。

http://ysktec.com/shiguregaki/blog/?p=1135shiguregaki.hatenablog.com





テーブル設計

この章では投稿アプリに使用するテーブルを定義します。
テーブルは以下の5つのテーブルを作成することにします。
・Articlesテーブル
・DetailedArticlesテーブル
・Articlesテーブル
・Categoriesテーブル
・Tagsテーブル



テーブルの構成

Articlesテーブル
記事を管理するテーブルです。各記事はユーザやカテゴリー、タグを紐づけられています。

カラム名 変数名 補足
記事ID article_id 主キー
ユーザID user_id 外部キー
ユーザごとの記事ID user_article_id
カテゴリーID category_id 外部キー
タグID tag_id 外部キー

DetailedArticlesテーブル
記事詳細を管理するテーブルです。Articlesテーブルとarticle_idで1:1に関連を持っています。

カラム名 変数名 補足
記事ID article_id 主キー 外部キー
タイトル title
記事内容 body
投稿日 published_date

ArticleUsersテーブル
記事を書くユーザを管理するテーブルです。Articlesテーブルとuser_idで1:多に関連を持っています。

カラム名 変数名 補足
ユーザID user_id 主キー
ユーザ名 user_name
パスワード password
性別 gender
メールアドレス mail_address

Categoryテーブル
記事のカテゴリーを管理するテーブルです。Articlesテーブルとcategory_idで1:多に関連を持っています。

カラム名 変数名 補足
カテゴリーID category_id 主キー
カテゴリー名 category_name

Tagsテーブル
記事のタグを管理するテーブルです。Articlesテーブルとtag_idで1:多に関連を持っています。

カラム名 変数名 補足
タグID tag_id 主キー
タグ名 tag_name


テーブルの関連性

上記のテーブルの関連性をER図にまとめると下の様になります。(IDEDF1X記法で記述)
※ネットで検索しながら見よう見まねで書いたので間違っているかもしれませんがご容赦ください。

f:id:shiguregaki:20170708104239j:plain





Laravelソースファイルの変更

変更や新規作成するLaravelファイル一覧

Laravelのプロジェクトファイル配下にあるファイルで本記事の中で変更、新規作成するファイルについてまとめました。

ファイル名 対応 備考
1
database/migrations/xxxx_xx_xx_xxxxx_
create_articles_table.php
新規作成 php artisan make:model <モデル名> -m”コマンドで新規作成(後述)
2 app/Article.php 新規作成 同上
3
database/migrations/xxxx_xx_xx_xxxxx_
create_detailed_articles_table.php
新規作成 同上
4 app/Detailed_Article.php 新規作成 同上
5
database/migrations/xxxx_xx_xx_xxxxx_
create_article_users_table.php
新規作成 同上
6 app/Article_User.php 新規作成 同上
7
database/migrations/xxxx_xx_xx_xxxxx_
create_categories_table.php
新規作成 同上
8 app/Category.php 新規作成 同上
9
database/migrations/xxxx_xx_xx_xxxxx_
create_tags_table.php
新規作成 同上
10 app/Tag.php 新規作成 同上




モデルファイルとマイグレーションファイルの新規作成

データベースを作成するためにモデルファイルとマイグレーションファイルを作成します。
モデルファイルとはデータベースのカラムの設定やデータベースから得た情報の操作を行うことができるファイルになります。
マイグレーションファイルはデータベースに対してテーブル作成やカラム追加などの操作を行うことができるファイルになります。
それぞれのファイルはartisanコマンドを使って作成します。

以下のコマンドを使って、モデルファイルとマイグレーションファイルを新規作成します。


 モデルファイルとマイグレーションファイルを作成するコマンド 
>php artisan make:model <モデルファイル名> -m

  • mオプションがモデルファイルと同時にマイグレーションファイルを作成するオプションになります。





注意:
このコマンドを実行した順番でマイグレーションファイルが実行されるため、このコマンドを実行する順番を考慮する必要があります。
これはマイグレーションファイルで指定するテーブル間の外部キー制約が原因で、作成されるテーブルの順番を考えないと制約に違反してエラーとなってしまうためです。

テーブルの関連性の章で示した通り、各テーブル間は外部キーで関連をもっています。
ArticlesテーブルはArticleUsersテーブル、Categoriesテーブル、Tagsテーブルと外部キーで関連づいています。
DetailedArticlesテーブルはArticlesテーブルと外部キーで関連づいています。
ですので、上記コマンドでモデルファイルを実行する順番は

ArticleUsersテーブル、Categoriesテーブル、Tagsテーブル => Articlesテーブル => DetailedArticlesテーブル

という順番になります。





下の画像の様にArticleUserモデル、Categoryモデル、Tagモデル、Articleモデル、DetailedArticleモデルを順に新規作成します。
※モデルは単数表記で記載するのが慣例のようです。

f:id:shiguregaki:20170708104256j:plain

モデルの作成と同時に自動でマイグレーションファイルが作成されています。
xxxx_xx_xx_xxxxx_create_article_users_table
xxxx_xx_xx_xxxxx_create_categories_table
xxxx_xx_xx_xxxxx_create_tags_table
xxxx_xx_xx_xxxxx_create_articles_table
xxxx_xx_xx_xxxxx_create_detailed_articles_table





正常にモデルファイル、マイグレーションファイルが作成されると以下のディレクトリにコマンドで指定した名称でファイルができているはずです。


モデルファイル格納ディレクト
<プロジェクトファイルのルートディレクトリ>/app/

f:id:shiguregaki:20170708104306j:plain







マイグレーションファイル格納ディレクト
<プロジェクトファイルのルートディレクトリ>/database/migrations/

f:id:shiguregaki:20170708104317j:plain




ArticleUsersテーブルのマイグレーションファイルの変更

テーブル設計の章で設計した内容に基づいてArticleUsersテーブルのマイグレーションファイルを設定していきます。
以下のソースでは主キーにuser_idを指定し、その他のカラムも型に応じて設定しています。

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateArticleUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('article_users', function (Blueprint $table) {
            //ユーザIDの設定(主キー)
            $table->increments('user_id');
            //ユーザ名の設定
            $table->string('user_name');
            //パスワードの設定
            $table->string('password');
            //性別の設定
            $table->string('gender');
            //メールアドレスの設定
            $table->string('mail_address');
            //NULL値可能なcreated_atとupdated_atカラム追加
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('article_users');
    }
}


up()はマイグレーションを実行したときにコールされる関数です。
down()はマイグレーションが失敗時に実行される関数です。




Categoriesテーブルのマイグレーションファイルの変更

テーブル設計の章で設計した内容に基づいてCategoriesテーブルのマイグレーションファイルを設定していきます。
以下のソースでは主キーにcategory_idを指定し、その他のカラムも型に応じて設定しています。

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateCategoriesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('categories', function (Blueprint $table) {
            //カテゴリーIDの設定(主キー)
            $table->increments('category_id');
            //カテゴリー名の設定
            $table->string('category_name');
            //NULL値可能なcreated_atとupdated_atカラム追加
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('categories');
    }
}





Tagsテーブルのマイグレーションファイルの変更

テーブル設計の章で設計した内容に基づいてTagsテーブルのマイグレーションファイルを設定していきます。
以下のソースでは主キーにtag_idを指定し、その他のカラムも型に応じて設定しています。

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateTagsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('tags', function (Blueprint $table) {
            //タグIDの設定(主キー)
            $table->increments('tag_id');
            //タグ名の設定
            $table->string('tag_name');
            //NULL値可能なcreated_atとupdated_atカラム追加
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('tags');
    }
}




Articlesテーブルのマイグレーションファイルの変更

テーブル設計の章で設計した内容に基づいてArticlesテーブルのマイグレーションファイルを設定していきます。
以下のソースでは主キーにarticle_idを指定し、ユーザID、カテゴリーID、タグIDを外部キーとして紐づけています。
その他のカラムも型に応じて設定しています。

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateArticlesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('articles', function (Blueprint $table) {
            //記事IDの設定
            $table->increments('article_id');
            //ユーザIDの設定
            $table->integer('user_id')->unsigned();
            //ユーザIDをarticle_usersテーブルの主キーと紐づける
            $table->foreign('user_id')->references('user_id')->on('article_users');
            //ユーザごとの記事IDの設定
            $table->integer('user_article_id')->unsigned();
            //カテゴリーIDの設定
            $table->integer('category_id')->unsigned();
            //カテゴリーIDをcategoriesテーブルの主キーと紐づける
            $table->foreign('category_id')->references('category_id')->on('categories');
            //タグIDの設定
            $table->integer('tag_id')->unsigned();
            //タグIDをcategoriesテーブルの主キーと紐づける
            $table->foreign('tag_id')->references('tag_id')->on('tags');
            //NULL値可能なcreated_atとupdated_atカラム追加
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('articles');
    }
}




DetailedArticlesテーブルのマイグレーションファイルの変更

テーブル設計の章で設計した内容に基づいてDetailedArticlesテーブルのマイグレーションファイルを設定していきます。
以下のソースではarticle_idをArticlesテーブルの外部キーと紐づけています。
その他のカラムも型に応じて設定しています。

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateDetailedArticlesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('detailed_articles', function (Blueprint $table) {
            //サロケードの場合、ここを有効にして複合キーを無効にする
            $table->integer('article_id')->unsigned();
            //記事IDをarticlesテーブルの主キーと紐づける
            $table->foreign('article_id')->references('article_id')->on('articles');
            //タイトルの設定
            $table->string('title');
            //記事内容の設定
            $table->text('body');
            //投稿日の設定
            $table->timestamp('published_date');
            //NULL値可能なcreated_atとupdated_atカラム追加
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('detailed_articles');
    }
}




マイグレーションの実行

マイグレーションを実行するには以下のコマンドをコマンドプロンプト上で実行します。


 マイグレーション実行コマンド 
>php artisan migrate

f:id:shiguregaki:20170708104413j:plain




データベースの確認

データベースが正しく作成されているか確認するため、phpMyAdminにアクセスします。
ブラウザでphpMyAdmin(以下のURL)にアクセスしてください。

phpMyAdminのアクセス先http://localhost/phpmyadmin

以下の5つのテーブルが新規で作成されているはずです。
・articles(Articlesテーブル)
・article_users(ArticleUsersテーブル)
・categories(Categoriesテーブル)
・detatiled_articles(DetatiledArticlesテーブル)
・tags(Tagsテーブル)

※以下の3つのテーブルはlaravelにデフォルトであるテーブルです。
・migrations
・password_resets
・users

f:id:shiguregaki:20170708104423j:plain





ArticleUsersテーブルの確認

テーブル設計の章で設計した以下のカラムができています。
・ユーザid:user_id(主キー)
・ユーザ名:user_name
・パスワード:password
・性別:gender
・メールアドレス:mail_address
※created_at,updated_atはテーブル生成とアップデートした時間でマイグレーションファイルで指定した$table->timestamps();によって作成されているカラムです。

f:id:shiguregaki:20170708104445j:plain




Categoriesテーブルの確認

テーブル設計の章で設計した以下のカラムができています。
・カテゴリーid:category_id(主キー)
・カテゴリー名:category_name
※created_at,updated_atはテーブル生成とアップデートした時間でマイグレーションファイルで指定した$table->timestamps();によって作成されているカラムです。

f:id:shiguregaki:20170708104458j:plain




Tagsテーブルの確認

テーブル設計の章で設計した以下のカラムができています。
・タグid:tag_id(主キー)
・タグ名:tag_name
※created_at,updated_atはテーブル生成とアップデートした時間でマイグレーションファイルで指定した$table->timestamps();によって作成されているカラムです。

f:id:shiguregaki:20170708104506j:plain




Articlesテーブルの確認

テーブル設計の章で設計した以下のカラムができています。
・記事id:article_id(主キー)
・ユーザid:user_id(外部キー)
・ユーザごとの記事id:user_article_id
・カテゴリーid:category_id(外部キー)
・タグid:tag_id(外部キー)
※created_at,updated_atはテーブル生成とアップデートした時間でマイグレーションファイルで指定した$table->timestamps();によって作成されているカラムです。

f:id:shiguregaki:20170708104514j:plain




DetatiledArticlesテーブルの確認

テーブル設計の章で設計した以下のカラムができています。
・記事id:article_id(主キー、外部キー)
・タイトル:title
・記事内容:body
・投稿日:published_date
※created_at,updated_atはテーブル生成とアップデートした時間でマイグレーションファイルで指定した$table->timestamps();によって作成されているカラムです。

f:id:shiguregaki:20170708104522j:plain





まとめ

今回はLaravelを使って以下の2つのことを確認しました。
・テーブル設計に基づいてマイグレーションファイルを作成する
マイグレーションを実行することで、投稿アプリに使用する新規テーブルを作成する

今回は設計に基づいたマイグーレーションを作成し、実行することでテーブルを新規に作成しました。
これによりテーブルの型が決まりました。しかし、実際にアプリからアクセスするにはモデルにも設定が必要です。
次回以降ではモデルの設定をして、実際のデータにアクセスする方法をまとめたいと思います。



次回記事

次回記事はモデルファイルの設定についてまとめたいと思います。

http://shiguregaki.hatenablog.com/entry/p45shiguregaki.hatenablog.com




前回記事

shiguregaki.hatenablog.com


以上!