文系seの備忘録

Excelの改行でひたすらスペースを打っていた機械音痴の文系seが日々の備忘録を綴る。

【PHP】 ライブラリ、フレームワーク・・・結局どれ使えばいいの!?

これまでPHPを触ってきて、膨大な関数、クラスライブラリが用意されてることが分かりました。
本日はこのクラスライブラリに関して思ったことをまとめておきます。。




・・・その前に。


フレームワークとライブラリの違い

今更ですけどフレームワーク」と「ライブラリ」についての違いを確認しておきます。(唐突!)
この2つ、混同しがちでネットとかでは同じようにひっくるめられてたりして文系SEには
大混乱・・・
でも名前からして全然違うし・・・!



・ライブラリ

辞書的なもの(と認識している)。←名前のまんまじゃん
samooooon.hatenablog.com
↑昨日の記事でライブラリを使ってみる例を挙げましたけど、自分で初期化して、処理するメソッドを呼ぶ必要がありました。


f:id:ron623:20190313121032p:plain
(使う道具を自分でチョイスして動かすかんじ?)


フレームワーク

枠組み。共通認識的なもの。←名前のまんまじゃん!
ライブラリとは逆で、初期化から処理まで用意されている。
開発者はそれを穴埋めするだけで動くアプリとなる。

f:id:ron623:20190313121215p:plain
(既に完成してるモノを自分仕様に作るかんじ?)


ちゃんとした定義は専門書を見てください・・・(><)





・ライブラリ、フレームワークの探し方

・アップロードが行われているもの
・開発者に何等かの手段で連絡が取れるもの
・いろんなところで利用されていて利用頻度の高いもの

上記のようなものが良いかと思います。
具体的なおすすめは、「PHP ライブラリ おすすめ」などでググればきっと出てくるはず。

あとは、周りにPHPに明るい方がいたら聞いてみるのも良さそう!




・結局どれを使えばいいの?


たくさんのフレームワーク、ライブラリが用意されていて便利な反面、気を付けなければならないのは使いどころかなと思いました。


PHP学びたての意見でアレなんですけど、
自分が手掛けるべき箇所と、ライブラリに任せる場所の線引きが曖昧になってしまったり
ライブラリに依存しすぎて独自の変更がしづらくなってしまったりするデメリットも
あるんじゃないかなーと思ったり。
常に新しくしていくシステムであればライブラリに依存しすぎないことも大切かなと感じます。


そのへんの加減はその案件、プロジェクトの性質によって異なると思いますので
チーム内でよーく検討して方針を決定していく必要がありそうですね。。。

【PHP学習】外部ライブラリ管理ツール、Composer

前回の記事でも、PHPではたっくさんの関数やライブラリが用意されてて便利って話をしました。
そんななか、本日学習を進めるなかで新たなことばを知りました。


それが

「Composer」
パッケージ管理ツールだそうです。
(なんかRubyやってるときもそんなんあったっけな)

拡張ライブラリをインストールするための管理ツールで、ライブラリ追加時に以下のようなことをしてくれます。



1.インストール・アンインストールをコマンドひとつで実行
パッケージ間に依存性があることが多いですが、それらを自動で解決してくれます。
また、定義ファイルに定義しておくことでまとめてインストールすることが可能です。


2.アプリケーション単位にパッケージを管理する
アプリケーション単位で個別にパッケージをインストールするため、
アプリケーションどうしで同じライブラリの異なるバージョンを利用することが可能です。

※以前はPEARっていう管理ツールが使われてたらしいんですが、これはすべてのアプリケーションで
同じバージョンしか対応してませんでした(プラットフォーム単位でライブラリを管理してた)



3.ライブラリの自動ローディング機能を利用できる

クラスを個別にインポートしなくても、自動で有効化してくれます。
なので、プログラムから直接呼び出してないライブラリに関しても使えないといったことがなく便利です。



早速使ってみました。


例、「Smarty」ライブラリのインストール


1.Composerのインストール

公式サイトからインストーラ実行、デフォルトで進める。


2.定義ファイル作成

現在のアプリケーションで利用するライブラリを定義しておく。
{
 "require":{
  "smarty/smarty": "~3.1"
  }
}

上記で、現在のアプリではsmartyの3.1以上を利用すると定義しました。


3.パッケージのインストール

以下コマンドでインストール実行
composer install

上記を実行するとアプリケーションルート配下に、ライブラリ動作に必要なフォルダとファイルが作成される。
そのなかのautoload.phpはライブラリを自動ロードするためのファイル


以上でSmartyというライブラリのインストールが完了しました。
このライブラリを実際に使ってみます。


ビジネスロジック

主な内容は
autoload.phpを最初にインポートして、
・2行目でクラスのインスタンス化、
・テンプレートと、コンパイルすみテンプレートの保存先(一度実行されるとそれ以降はこれが利用される)を設定、
・最後にテンプレートの呼び出し

という流れです。


*テンプレート

拡張子は .tplにする



これを実行すると、

f:id:ron623:20190312181915p:plain

本文はビジネスロジックで記載した内容が、タイトル部分にはテンプレートファイルの内容が反映されます。



こうして枠組みがいろいろ用意されているのはいいですね。

また、この例だとちょっとわかりづらいですが、開発時にビジネスロジックとそれ以外のテンプレ的な部分を
分けられるので分業しやすいですし便利だなと感じました。

【PHP学習】PHPはゆるふわって言われてるけど使い方間違うとキケンかも

環境構築をして、早速色々と動かしてみています!
気づいたことをメモしておきます!!


◎型宣言がいらない、型変換でエラーにならない

// 二つの引数を足し算して返すかんすう

function calc($str, $num) {

$intStr = (int)$str;
return $intStr + $num;
}



例えば上記の関数を

calc ('12あああ', 111);

と呼び出した場合、たぶんjavaとかなら文字列をintにするときのキャストでエラーになると思うんですけど
PHPでは先頭から数字として認識できるところまで抜き出すようになっているようです。
なので、今回のように変な値が入ってもエラーにならず計算されてしまいます。
(もし、変な値をはじくならチェック処理を設ける必要がありますね)

また、2,8,16進数の変換時も 0b11 → 0 のようになってしまうと思われるので
まず10進数にしてからキャストする必要がありそうです。。




◎ 関数がめっちゃ豊富にある

なんか処理やりたいってときに、だいたいググれば関数がでてきました。
逆にいうと、ある程度「あれをやりたいときはあの関数を使う」っていうのを
頭の中におさえておいたほうがいいなと感じました。
上記の例のように、PHPは自由度が高いがゆえに開発者側で注意しないとエラーに気づけないことがあるため
なるべくなら用意されているものを利用して確実なプログラムを作りたいものです。




◎ セキュリティ対策に関して学んどく
PHPについて学び始めたばかりではあるけれども、実用的なアプリ作りには欠かせないものであり
学習を進める中で身に着けていくべきだと思う
XSS対策とかSQLインジェクションとかよく聞くやつの復習はもちろん
メール送受信に関してや、盗聴や、最新のトレンドなどもおさえておきたい。




まだ触りたてではあるけど色々とやらなきゃなーって課題が見えてきた。
、、、と同時に色々できて楽しい!!

【PHP学習】WindowsでXAMPPを使ってみた

PHP学習のために、Windows環境にXAMPPを入れてみました。


●XAMPPとは??

Webアプリに必要なソフト一式をパッケージにしたもの。
X・・・Windows,Linux,Mac,Sokarisのクロスプラットフォーム
A・・・Apache(HTTPサーバー)
M・・・MySql(DB)
P・・・PHPプログラミング言語
P・・・Perlプログラミング言語



・・・で、なんでPHP言語の学習をするのにXAMPPとかいうよくわかんないツールを使って
環境構築したのかというと。。


PHPの学習をするのに、PHP単体をインストールすれば動くっちゃ動きます。


しかし、PHPというのは何かというとHTMLに埋め込まれて動的に実行される言語であり、
JavaScriptとの違いは「サーバーサイドでコードが実行される」ことです。


PHPJavaScriptの違い

以下はPHPの処理の流れです。
f:id:ron623:20190306132841p:plain

左側:クライアント、 右側:サーバー

JSはクライアント側でコードが実行されるのでクライアント側でコードが見れてしまいますが、
PHPはサーバー側でコードが実行されるので結果しか受け取らず、コードは見れません。

よってセキュリティ面で優れており、SNSやショッピングサイトなどで多く利用されています。


PHPが「サーバーサイドでコードが実行される」ということですので、
クライアントとサーバーをたてて学習するのが適切だといえます。

というわけで、XAMPPを使ってその環境を構築することにしたのです!




手順はたくさんネットにあがっているので割愛します。
特につまづいたところもありませんでした。


ツールを使えば簡単に環境構築はできましたが、それよりも

「そもそもPHPって・・・?」

「XAMPPって・・・?」

と、手順を追うごとにひとつひとつ疑問の嵐でしたので学習するうえでの目的をまとめてみたのでした。



今後はしばらくPHPを用いたWebアプリの開発のお勉強をしていきます!

【初心者向け】新人時代ってどんなことやるの?

今回は新人時代にどんな仕事をするか、について実体験を交えて紹介します。




パターン1: 人員埋め合わせでいきなり難しいプログラミング(私の実体験)

まず私の新人時代のスペックは、文系大学卒でプログラミング未経験
新人研修時代にやったのはC言語のif文まで(あまりにも理解が悪すぎて、他の人がすべての章を学習し終えたのに
私だけif文を使った簡単なプログラムで苦戦)
パソコン自体の操作がおぼつかない状態でした。





こんな状態での最初の作業は、Visual Basicを使った給与計算システムの開発でした。

チームは2人体制で、もう1人は偉い地位の方で出社が遅い(フレックス制でしたので)
それまで私はわけのわからない暗号をボーっと眺めて、どうしよう・・・って感じでした。


一応OJT指導員がついていたのでその方に聞きながら進めてはいたのですが、
その指導員ですら悩むようなプログラムを新人に課していたようです。

もう半ば泣きながら、必死でネットなどで調べたり、フロアにいる優しそうな(笑)先輩を呼んで教えてもらったりしてました。



このように、初心者だからといって考慮せずいきなり実務をほうりこまれるケースも少なくありません。


休日返上でプログラミングについて勉強しました。
そのおかげでなんとか納品までこぎつくことができました。










パターン2:自主学習


パターン1と逆で、どこも要員が足りている場合、本社で自主学習といったケースもあります。
一人で一日中テキストやネットでお勉強。
私だったら正直退屈になっちゃう。








パターン3:簡単なおしごと

パターン1のようにいきなり難しいプログラミングをさせられたりするのではなく、テストをやったり、
データを作るなどの仕事を通して作業内容を理解していくというパターンです。


個人的には、これが一番理想的なんじゃないかと思います。
テストをする=システムを指示通りに動かせるということなので、システムがどのようなものなのか
おさえることができますし、全体像が分かったうえでプログラミングに入れれば
処理の詳細を理解するのもスムーズにいきやすいです。










新人が配属されるのは「人員が足りていないところ」です。
なので、タイミングによってさまざまです。
大手企業をのぞいて、一般的な中小企業では本人のスキルが加味されるというよりかは、人数埋め合わせというケースが多いです。



前回のブログにも書きましたが、ここでも大切なのは「わからないことは質問する」、そして
「困ったときは自分ひとりで抱え込まずにだれか相談しやすい人に助けを求める」です!!


学生時代と違って、いろいろと苦労すること・うまくいかないことも出てくるかもしれませんが、
みんな何かしらそうやって悩みをかかえてるもんです。無理しすぎず、なんかあればだれかにはきだしてくださいね。

【初心者向け】新人研修ってどんなことするの?

初心者向けシリーズ、続いては

「新人研修ってどんなことするの?」です。


新社会人の皆さんは、もしかしたら入社前教育で課題を出されているかもしれません。
私の会社でもweb研修・テキストの2つの課題がありました。Web研修のほうは章ごとにテストが設けられており進捗度を会社に管理されてました。



さて、入社後の新人研修ですが、

・ビジネスマナー研修

・ITスキルに関する研修

の2つを行う会社が多いようです。


ビジネスマナー研修は、社会人としてのマナーを身に着けるための研修で、
挨拶や名刺交換、ビジネス文書の書き方などを学びます。

f:id:ron623:20181127103644p:plain


こちらは期間としては2~3日位が一般的かと思われます。
外部の講師に習うか、ほかの会社と合同で講習会に参加する形があります。






続いて、ITスキルに関する研修が始まります。
期間は数週間~1年と会社によって本当に様々です。



こちらは業種によって様々かとは思いますが、特に配属先が決まっていない場合は
前回のブログ

samooooon.hatenablog.com

の記事に記載した開発の流れの「4.製造(プログラミング)」にあたる部分に関する研修を行うことが多いです。
・・・つまり、C言語Javaなどのプログラミングや、データベース構築、エクセルのマクロなどを学びます。

初歩的な部分から研修はスタートしますが、習熟度別に進むわけではありませんので
初心者の方は追いつくのが大変かもしれません。
実作業に入ってからは、周りの先輩方が忙しくて時間をさけないことも多々あるので
この期間を有効に活用して、不明点はバンバン質問しましょう。



グループワークで一つのシステム開発を行ったりする場合もあります。
要件定義から納品まで、実際のおしごとと同じように行います。
もともと大学や専門学校でプログラミングを経験してきた人は実装フェーズで皆を引っ張っていったり、
文系卒のひとはお客さんへのヒアリングで力を発揮したり、それぞれに得意な部分を生かして
協力してシステム納品を目指します。



配属先が決まっている場合は、それに応じた研修を行う場合もあるかと思います。
要件定義フェーズであれば客先へのヒアリングの練習、テスト専門であればテスト技法、など。




また、専門的な業界で、業界の知識を身につけなければ話にならないって場合は
IT知識というよりも、その業界に関するお勉強をしていきます。
たとえばクルマの会社であれば、その部品や構成をまずは覚えるとか。。

f:id:ron623:20181127102817p:plain

案外、このパターンは多いです。
IT技術に関しては全く学ばず、ひたすらその業界の知識を学ぶ。


「あれ!?SEになったはずなのに全然プログラミングもしてないし、車の部品ばっか覚えてるんだけどぉ~><!!!」と
入社してからなってしまわないよう、どんなことを入社後にするのかよーく理解し、認識のずれがないよう気をつけてくださいね。

(逆に、プログラミングはガッツリやりたくないけど、車が好きだから車にかかわる業務をずっとしていたい!って人は天職かもしれませんね。)




新人研修期間は残業はない企業が多いです。
自主的に勉強するために残業していく人はいたりします。
個人的には定時で帰れる貴重な期間だし、帰っていいと思いますけど
研修についていけなさすぎてマジでやばいと思ったら研修後に講師に質問したりしても良いかもしれませんね。


以上、新人研修についてでした~。
とにかく新人研修で大事なのは、「わからないことはガンガン質問する!」です。

【初心者向け】システムエンジニア(SE)ってどんなことするの?


早速ですが、システムエンジニア(SE)がどんなお仕事なのか紹介していきたいと思います。
システムエンジニアは名前のとおり、
「システム(モノの仕組みや構成)」の「エンジニア(技術者)」です。
お客さんが「こういうものがほしい!」と言ったことに対して、それを形にするお仕事です。


なんらかのシステムを構築する、という点でゴールは同じですが、
その過程のどのポジションに配属されるかは異なってきます。
入社する前に分かっている場合と、入社後に配属になる場合とがあるかと思います。



以下でシステム開発の流れを説明します。
基本的に、おおまかな流れはどのシステム開発でも共通していますのでおさえておくとよいでしょう。






超簡単なたとえで、「家をたてる」ことで説明します。



1.要件定義

f:id:ron623:20181126170055p:plain

まず、お客さんにいろいろと聞きます。
ここできくのは

・今回家を建てる目的
・規模、予算
・要望(将来的に増築しやすいように、使う材料、などなど・・)

この時点でお客さんとのズレがあると、あとあと致命的な問題につながります。
なので、、この段階で要望を正しく取り入れ、さらに、よりよい提案を合わせて行っていきます。


実務でも家の例と同様、システムの全体像をこのフェーズで決定します。





2.基本設計(外部設計)


f:id:ron623:20181126170204p:plain


「1.要件定義」で決まった内容を、より具体的にして図や文章にする段階です。


・方針設計
 - 耐震、防火などのテスト方法の決定
 - 建築方針の決定など

・機能設計
 - 全体の間取り図

・その他設計
 - 業務として運用するために必要な事柄
   (費用、納期、大工さんのスケジュール管理とか)


実務でも、どうやってシステムのテストをするかを決めたり、処理の流れ図を書いたり、
費用、納期、チームの体制やスケジュールを決めたりします。





3.詳細設計(内部設計)


f:id:ron623:20181126170230p:plain


「2.基本設計」の内容を、より作る人(=大工さん)向けにしていきます。

リビングにはタイルを何枚、ネジを何本、クギを何本使って、どのような工法で建築していくのかを細かく決めていきます。


実務でも同じように、どのような処理を実装するかを決めていきます。






4.製造(プログラミング)

f:id:ron623:20181126170250p:plain


いよいよ大工さんが「3.詳細設計」で作った設計書をもとに、家を建てはじめます。


実務ではPG(プログラマ)がプログラミング(コーディング)を行います。






5.テスト

f:id:ron623:20181126170307p:plain

作った家がちゃんと建てられたかどうか、確認します。
耐震性、耐火性など、決められた項目にしたがってテストしていきます。


実務でも同じように、PGかSE(システムエンジニア)が、完成したシステムを動かしてみて
データがちゃんと受け渡しできるか、画面の移動が正しくできるかなどを確認します。






6.保守

f:id:ron623:20181126170318p:plain

お客さんにひきわたした家の定期メンテナンスや、トラブル時の対応を行います。
台風で屋根がはがれたからなおしてほしい、壁をはりかえてほしい、などなどですね。
大工さんが行う作業です。


実務でもSEかPGが行うのが基本のようなんですが、ここは会社によって異なり、
保守専門の部署を設けているところもあったりします。







以上がシステム開発の主な流れです。




上記でなんとなくわかったかもしれませんが、SEの仕事は本当に様々です。

「1.要件定義」でお客さんにどんなシステムがいいか要望を聞く人たちは
プログラミングは全然やらず、人と話している時間がほとんどですし、

「4.プログラミング」といっても、いわゆるC言語やJavaなどのプログラムではなくデータベースの構築をしたり、バッチファイルを作ったり、エクセルのマクロを組んだりする人もいます。

「5.テスト」担当者は、単にテスト内容に従ってシステムを操作するだけでなく、テストを作成したり、テスト効率化の工夫を求められたりする場合もあります(自動化など)。


会社によっては1~5まで、ほぼすべてを担当することもありますし、どれかを兼任する場合もあります。
私はすべて担当したことがありますが、「1.要件定義」を主にやっていたときはほとんど外出・出張で、
自宅にも帰らない日々がつづきました。
プログラミングもかなり忘れちゃいましたね・・。





とりあえずSEってなに?ってなったら、お客さんの要望をもとに、システムを構築するお仕事!
もっとかんたんにいえば、
こんなことがしたーい!っていうもやっとしたリクエストを、形にするおしごと
ってかんじで考えておけばよいかと思います!!