- 投稿日:2019-01-27T23:43:27+09:00
おい、そこの新人くん
世の中の新人エンジニアたちへ
見た目って大事なんよ
まずスーツ、ちゃんと着ような。
べつに高いの着てってわけじゃなくて、シワシワはかっこ悪いよ。
あと、財布はお尻のポケットに入れないほうがいいよ。遅れるなら連絡な
そりゃ電車遅れたりするよね。そのとき、ちゃんと連絡しような。
べつに電車の中で電話しなくていいからさ。
SMSでもLINEでもいいから、連絡してくれないと心配だからさ。休むんなら病院行こう
俺だってもちろん調子悪い日あるよ。そのときは思い切って休んだほうがいい。
でも、病院は行こうな。
べつに疑ってるんじゃなくて、診断書なんていらないから診察はしてもらおう。
時期によってはインフルエンザだったり、流行り風邪だったり色々だからな。
で、その後ゆっくりしてからでいいから連絡くれるかな。
明日も休んだほうがいいかもしれないでしょ。今日何すんの?
仕事始める前に、俺と今日何するか確認しような。
何を、どこまでやるか決めておかないと、早く帰れる日も残業しちゃうでしょ。
早く帰れるんだったら空気読まずに定時退社や。
そういう文化一緒に作ろう。設計書読めない?
ごめん、俺間違って書いているかもしれないから、あれ?って思ったらすぐ聞いてよ。
すぐ聞けなかったら、メールでもなんでもいいから形に残して忘れないようにね。
先輩だからってなんでも完璧じゃないから、自分の腹に落ちるまで聞いてくれていいよ。
腹落ちさせられない設計しちゃってるのは俺だからさ。なんかエラー出た?
エラーって一言に言うけど、結構種類あるのよ。
ノートPCだったらそのまま持ってきてくれたらいいし、
難しかったらコンソールの内容をメールで送りつけてくれていいよ。
絶対そのほうがお互い幸せだし、デバッグって近道ないからさ。
まずは正確に事象を教えてね。ちゃんと作れたか不安?
確かに、自分のコーディングって最初は不安だよな。
ここ、これでいいのかなって部分を先輩に確認してもらおう。
それに応じない先輩は、もう相手にしなくていいよ。
付いていく人を選ぶ権利は、誰にだってあるよ。そろそろ帰る?
オッケー。全然いいよ。
でも、夕方くらいに一度状況を教えてくれてると助かるな。
帰り際の作業報告メールだけじゃ、おじさん寂しくなっちゃうよ。さいごに
すっかりおじさんになってしまい、若手から中堅へ、
エスカレータ式にレベルアップしてしまいました。
この記事は、新社会人の離職率が叫ばれるようになって久しい中、
おじさん側だってこんなこと思ってるんだよ、ということを書いてみました。個人的には感覚は若い方だと思っていますが、そういう人ほどずれているんでしょう。
一方的ではありますが、日頃感じていることをありのままに書き出しています。おじさんと若手の間でギクシャクしちゃうのって、結局"進捗"が大きいと思います。
その進捗を一緒になって作っていくのは上司の役目です。
決して担当者ではありません。しかし、"進捗"という重たいドアを開けられずに、コミュニケーション不足に陥ることがママあります。
そんなときは、おじさんはこんなこと考えているんだよ、というご参考になればと思います。
- 投稿日:2019-01-27T17:18:11+09:00
「Salesforce Japan Dreamin' 2019」参加してみた
「Salesforce Japan Dreamin' 2019」とは
Salesforce Japan Dreamin' 2019
Salesforceに携わる全ての方(ユーザー、管理者、開発者、中の人)が参加できる
Salesforceコミュニティ合同イベントです。キーノート聞いてみた
「Salesforce Japan Dreamin' 2019」は、
中の人(Salesforce社員)の歴史から始まりました。#japandreamin
— すー (@4zzzzzz5) 2019年1月26日
Keynoteスタート! pic.twitter.com/1dw8BG0WkI中の人の苦労話、Salesforceの魅力、今後のSalesforce等について聞くことが出来ました。
一番印象に残った話は、
「Salesforceは、鍬で畑を耕していた人にトラクターを使わせるようなもので、時間と体力をお金で買って生産性を上げる。」※私のニュアンスなので間違っていたらすみません。
と聞いて、Salesforceの必要性が自分の中で更に明確になりました。セッション行ってみた
キーノートとエンドセッションを除くと、12のセッションが開催されました。
そのうち、私は以下のセッションに行ってみました。アドミン苦労話
まず、SJAG主催の「アドミン苦労話」へ
#JapanDreamin
— すー (@4zzzzzz5) 2019年1月26日
レポートダッシュボードを活用するためには商談など入力画面を入力しやすくすることは有効! pic.twitter.com/bn5gRXHQN3社内の定着化などSalesforce管理者に特化した話が聞けて勉強になりました。
Salesforceアドミンが始めるHeroku
ダイマ(?)により、「Salesforceアドミンが始めるHeroku」へ
#JapanDreamin
— すー (@4zzzzzz5) 2019年1月26日
レポートダッシュボードを活用するためには商談など入力画面を入力しやすくすることは有効! pic.twitter.com/bn5gRXHQN3個人的にHerokuは難しそうで食わず嫌い(?)だったのですが、
開発できれば可能性が広がると感じました。
食わず嫌いにならず、ちゃんと勉強します。ルーキー成長物語
ルーキー会主催の「ルーキー成長物語」へ
#japandreamin
— すー (@4zzzzzz5) 2019年1月26日
ルーキー会のセッション
プレゼンは成長につながる! pic.twitter.com/JNfXDP35hp私が今回Qiitaを書いた理由のひとつは、アウトプットの重要性に気付いたからです。
私は、話下手だし、文才もないけど、Qiitaにまとめてみようと決心しました。北海道胆振東部地震~ブラックアウトのその先に~
私自身が北海道出身&災害でSalesforceをどう活かしたのか気になり、
「北海道胆振東部地震~ブラックアウトのその先に~」へ#japandreamin
— すー (@4zzzzzz5) 2019年1月26日
災害発生時
安否確認だけではなく
情報共有、社員や取引先のフォローは重要だよね! pic.twitter.com/xb1hp2gfef三社の事例の紹介があり、
安全確認だけではなく、情報共有、社員や取引先のフォローは盲点でした。
災害は無いに越したことはないけど、備えあれば憂いなしですね。ハンズオンやってみた
Salesforce Saturday Tokyo主催の「豪華賞品争奪!? Trailhead バッジソン大会」へ
1時間だけでしたが、7バッチ獲得しました。
2時間で30バッチ稼ぐ猛者や1万ポイント近く稼ぐ猛者がいたようです。
すごい。
豪華賞品争奪!? Trailhead バッジソン大会の結果エンドセッション&懇親会(LT大会)参加してみた
エンドセッションと懇親会を通して、今回のイベントテーマ「繋ぐ」を最も感じました。
#japandreamin
— すー (@4zzzzzz5) 2019年1月26日
管理者も開発者も様々な形で貢献できる! pic.twitter.com/9VOEgdzKab特にLT大会では、ユーザー、管理者、開発者、
様々な面から見たSalesforceの魅力が伝わりました。まとめ
「Salesforce Japan Dreamin' 2019」に参加して、
私も1ユーザー(管理者)として、
Salesforceで社内外に貢献したい思いが強くなりました。
私の目標は以下の2点です。
- Salesforceを多くの方に知って頂く
- Salesforceコミュニティやユーザ会で得た知識を発信する
具体的にどうすればいいのか、これから考えます。
まずは熱が冷めないうちに、Qiitaにまとめました。Qiita初投稿ですので、読みにくい点が多々あったと思いますが、
最後までありがとうございました。
- 投稿日:2019-01-27T14:28:23+09:00
新卒が実践したレガシーコードとの戦い方
2018年に新卒で配属になってから半年くらいで、5つほどのプロジェクトに関わる機会があり、コードの改修やリプレースを担当してきました。
コードの規模はどれも数万行くらいで、プロダクトとしての規模で見ると月間数十万から数百万のユーザー数です。サーバーサイドからアプリまで、内容は様々でしたが、年季の入ったレガシーコードを見る中で、改善手法のパターンが見えてきたので、同じ境遇の新卒やその他のエンジニアに向けて、共有したいと思います。
レガシーコードとは
ここでいう、レガシーコードは古くから残り続けている、メンテナンスのしづらいコードです。
大抵、書いた人がすでに居なかったり、リファクタリングがされずに拡張がされ続け、もちろんテストは書かれていません。
新卒はおろか、先輩でも手がつけられない状況になっています。
リプレースには膨大な工数がかかるので、騙しだまし使っている現場が多いはずです。改善の前に
それらのレガシーコードに対して、まずチームに改善しようという意識がなければ、いくら自分だけが頑張っても、山火事をバケツで消しているようなものです。
そのような技術的負債を返済する意識を浸透させるために、
- ユニットテストやE2Eテストを徹底する
- リファクタリングを随時行う
という考え方を、あなたが新参者であっても、必要であれば上も巻き込んで、押し出していかなければなりません。
残念ながら、上の「テストを導入する」というアプローチは、新規コードで技術的負債が膨らむことに対しての抑制にはなりますが、既存のカオスコードに対してテストを書こうとしても、結合度が高かったり、メソッドの責務が多すぎたりと、そのままでは無理なケースがほとんどです。
そのため、テストを書くためのリファクタリングが必要になってきます。また、すでに動いている大規模システムでは、大規模なリファクタリングは、デグレード等のリスクを伴います。
そこで、まずはリファクタリングを小まめに行える文化を作り、リスクを分割しなくてはなりません。実際には、このあたりがファーストステップになることが多いので、この話をしようと思います。
How to refactor
まず、お勧めしたいのが「レガシーコード改善ガイド」という有名な本です。
こちらには、リファクタリングをする際の考え方や具体的なノウハウが詰まっているので、
ぜひ、読んでみてください。テスト環境の構築
すでに、テストが実行できる環境ならば良いのですが、
残念ながらテストを書いていないチームでは、テスト環境を構築するところから始めなくてはなりません。(レガシーコードが残る現場では、大抵の場合そのようです。)
どの言語でもユニットテスト用のフレームワークが何かしらあるはずなので、出来るならCIをサッと構築して、ユニットテストを組み込むところまでやってしまいましょう。テストを書くためのリファクタ
本来、リファクタを始める前に、テストを書いてシステムの保護するべきなのですが、
神クラス、神メソッドに対しては、残念ながらそれは放棄しなくてはならないかもしれません。ただ、一度にテストなしにそれらのコード群を変更しようとしても、大抵何かしらの不具合が起きてうまくいきません。
そのため順序立てて、改修をしていきます。簡単なことから始めよう
本当に些細なことでもいいので、まずリファクタリングしたい対象のクラスやメソッドを綺麗にしていきます。
逆に、まだこの段階では複雑なことはしてはいけません。
- フォーマットの整形
- マジックナンバーの抽出
- 長らく使われていないコメントアウトされた行の削除
- 変数、メソッドのリネーム
guard節などを活用してネストを浅くする- 明らかに無駄なロジックの削除
これらのリファクタは、もしかしたら、賢いIDEならやってくれるかも知れません。
最後の明らかに無駄なロジックとは、例えばこのようなコードです。// return isAdminでよい if isAdmin == true { return true } else { return false }だいぶ極端に書いていますが、実際このようなロジックはレガシーコードに散見されます。
こういう基本レベルかつ、コードが短くなるリファクタはこの段階でやってしまった方が、
効率的かつ、精神衛生的にも良いです。(このくらいは、日常的に見かけたらやっていきましょう。ただし、リファクタであることは他の人にもわかるように、ブランチを切らないまでも、コミットは分けましょう。)
神に挑む
実際に、数百行、数千行の神メソッドに挑んでいきます。
大規模なリファクタリングをする際に、試行リファクタリングという手法があります。
実際には使わない前提で、とにかく思うがままにリファクタリングをして、それを通じて該当部分の挙動や問題点を理解するという手法です。
いきなり綺麗にリファクタするのは難しいので、適当なローカルブランチを切って、そこで試行リファクタリングをしていくのをお勧めします。依存関係を取り除く
テストを書くために、依存関係を取り除きます。
認識合わせのためだけに、中身は思いつきで適当に書いたのですが、実際にはこのような内容のコードが数百行にわたっている状態を想定しています。(サンプルはSwiftです)
// 実際にはこの数十倍長い func evilfunc(completion: ((Entity?) -> Void)? = nil) { var value: Int? = nil var entity = Entity() if let fuga = fuga { do { try value = GodClass.getValue() if value >= 0, value < 10000 entity.value = value } } catch { // 握りつぶし } } if entity.value == nil { entity.value = 0 } completion(entity) }IntelliJやXcodeなど、IDEを使っている方にお勧めなのが、コードをブロックごとにたたむ機能です。
それを使って、うまく見たくないコードを隠しながら、巨大なコードの全体像をつかみます。続いて実際に、クラスやメソッドを改修していきます。
とにかく、依存関係を取り除いて対象をテストハーネスに入れる必要があるので、とりあえず中身のロジックを一旦メソッドに分割したり、色々試行錯誤してみます。
その中で、この責務はどのクラスがやるべきか、どこでロジックを区切るべきかというのも見えてきて、適切なクラスやメソッドを切りやすくなるかも知れません。この段階では、対象のコードは保護できていないので、できるだけシンプルに、低リスクで修正できるようにします。
多少おかしいと思っても、コピペで移動させた方が安全です。
あくまで、依存関係を取り除いて、テストを書くことが目的です。無事分離ができてテストが書けたら
ようやく、本格的なリファクタリングができます。
最終的には、適切なクラスに責務が分割されていて、各々が疎結合でテストしやすい状態を目指していきます。
実際のクラスの切り方は、採用しているアーキテクチャなどにもよりますが、後任者が困らないようにベストを尽くしていきましょう。レガシーコードを生まないために
今あるレガシーコードは、反面教師です。
最初にコードを見たとき、「なんでドキュメントコメントがないんだ!」「メソッドの名前とやってることが違う!」「privateメソッドが入れ子になってて中身が出てこない!」など思ったことはたくさんあるはずです。
その心の叫びを忘れずに、今後のコーディングに活かしていきましょう。
- 投稿日:2019-01-27T13:37:54+09:00
CentOS7からGithubにSSH接続する初期設定
他の記事が古くCentOS7からGithubへのSSH接続に手間取ったので、参考までに。
また、それぞれのコマンドの意味を説明している記事がなかったので簡単に説明しています。詳細は公式リファレンスを読んでください。【環境】
ConoHaVPS
CentOS 7.2【前述】
①コード内に書かれているコメントは、私がわかりやすいように記述しました。参考に入力してください。②既にid_rsaファイルが存在する場合は上書きされるので注意
③エラーが起きた場合はエラーコードを読んで対処してください。
ちなみに大体のエラーの原因は権限回りです。
sudo を付けて実行すれば動く事が多々あります。【SSH接続とは】
Githubとリモート環境などを接続するための接続方法です。
パスワードを作って、それをGithubに教えてあげることでGithub側からリモートへ接続できるようになります。ほぼ必須の手順です。
【手順】作成するsshディレクトリに移動します。
$ cd ~/.ssh次から、sshディレクトリ内にキーペアを作成し、接続認証を行っています。
$ ssh-keygen -t rsa -b 4096 -C "ここにあなたのメールアドレスを記述してください"すると以下の文が順番に表示されます。
それぞれ説明していきます。Generating public/private rsa key pair. Enter a file in which to save the key (/c/Users/you/.ssh/id_rsa): //何も入力せずにエンターキーを押してください。 Enter passphrase (empty for no passphrase): //好きなパスワードを入力してください Enter same passphrase again: //もう一度入力してください。上から説明していきます。
①秘密キーと公開キーのペアを作成します
②ファイルの名前を入力してください
③パスワードを入力してください
④もう一度入力してくださいGithubは自動でファイル名を付けて、デフォルトのファイル名の場合、勝手に探してくれます。なので、特別な理由がない場合以外はファイル名は打たないほうがいいかと思われます。
ファイルが作成されているか確認します。
$ ls // id_rsaファイルが作成されているか確認する。 "色々なファイル名" id_rsa id_rsa.pub2ファイルが作成されていればOKです。
作成した公開キーをGithubに登録する。
Githubに鍵を渡してあげなければCentOSには接続できません。
Github側でSSHキーを登録しましょう。$ cat id_rsa.pub // 以下にから始まる文字列が表示されます。文字列の最後尾に、最初に登録したメールアドレスが記述されていればそれです。表示されたパスワードをコピーして、Github側に登録しましょう。
以下のURLへ飛んで、SSHキーの設定を行います。
https://github.com/settings/keys簡単な手順としては
①NewSSHKeyを押下する。
②Keyの部分に先ほどコピーしたキーの内容を張り付ける
③Titleは何でもいいです。好きなお名前をどうぞGithubのバージョンによって変更があるかもしれませんので、
詳しくはGithubのHPを確認してください。SSHキーの管理追加
$ eval "$(ssh-agent -s)" Agent pid ****(//*は環境によって異なります)上から説明していきます。
①ssh-agentコマンドは公開鍵認証で使われる認証鍵を保持するためのプログラムです。わからない方はとりあえずこのまま打てば大丈夫です。
②認証エージェントのプロセスIDが表示されます。わからない方はスルーして大丈夫です。ssh-addをして、Github側からも見れるようにしましょう。
$ ssh-add ~/.ssh/id_rsa説明していきます。
①ssh-addコマンドは認証エージェントに秘密キーを追加します。
認証エージェント:eval "$(ssh-agent -s)"コマンドでバックグラウンドで待ち構えていました。来いよ!オラっ!って感じで待機している状態に、ssh-addで飛び込んであげた感じです。
無事、成功すれば作成した秘密キーが管理対象に加えられて、Github ⇔ CentOS7間でやり取りができるようになります。接続が出来るか確認
下記のコマンドで接続が出来るか試してください。
パスワードが求められた場合、初期に設定を行ったパスワードを入力してください。$ ssh -T git@github.comもしかすると下記の表示が行われるかもしれません。
The authenticity of host 'github.com (IP ADDRESS)' can't be established. RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48. Are you sure you want to continue connecting (yes/no)?: // YESを入力してください要は、このアドレス信用できるの?
これから接続できるようになっちゃうけどいいんだよな?って意味です。先ほどのssh-agent君が注意喚起してくれています。成功すると以下の表示が行われます。
Hi "ここにあなたの名前が入力されます"! You've successfully authenticated, but GitHub does not provide shell access.これで、接続が出来るようになりました。
- 投稿日:2019-01-27T01:02:52+09:00
PHPで最低限覚えておきたい基礎文法(言語リファレンス)
はじめに
久しぶりにPHPの基礎文法についておさらいしたので、その内容を簡単にまとめた記事です。
結構なボリュームになりましたが、これからPHPを始める人の参考になれば嬉しいです。もし間違っている点あれば、ご指摘いただけると幸いです。
基本編
PHPでプログラムを動かす為の基本です。サクッと覚えちゃいましょう。
Hello World
<?php echo "Hello World"; ?>まずは、おなじみのこれ。
PHPは、<?phpと?>の間に書かれたものが、プログラムとして実行されます。プログラムの終わりには;を付けます。コメント
#1行コメント //1行コメント /*複数行コメント 複数行コメント */全部で3種類あります。
/*複数行コメント*/を使う場合、同じ形でコメントアウトをネストするとエラーになるので注意です。文字列の出力
echo "こんにちは"; //こんにちは print "こんにちは"; //こんにちは
echoもしくは
この2つの違いは、次の3つです。基本はechoで問題ないかと思います。1.
echoはカンマ「,」区切りで複数の文字列を指定できるのに対し、echo "Hello", "World"; //この構文はエラーが出ません print "Hello", "World"; //この構文はエラーが出ます2.
echoは返さない$str = echo "Hello World"; //この構文はエラーが出ます $str = print "Hello World"; //この構文はエラーが出ません※結果を返さない分、わずかにecho()の方が早いようです。
文字列
echo "文字列"; echo `文字列`;文字列は
"ダブルクォーテーション"か'シングルクォーテーション'で囲むことで、扱うことができます。
この2つの違いは、変数が展開できるか否かです。変数については、この後で触れてます。$str = "太郎"; echo "私の名前は、$str"; //私の名前は、太郎 $str = "太郎"; echo `私の名前は、$str`; //私の名前は、$strヒアドキュメント
echo <<<EOD ヒアドキュメントを使えば、長い文章を簡単に出力することができます。 連結文字やダブルクオーテーション使わずに済みます。 EOD; /* ヒアドキュメントを使えば、長い文章を簡単に出力することができます。 連結文字やダブルクオーテーション使わずに済みます。 */ヒアドキュメントは、
<<<開始ID 文字列 終端ID;で使うことができます。IDでよく使われるのが、「EOM」「EOF」「EOD」ですが、「ABC」でも何でも構いません。
ちなみに、「EOM」は End Of Message、「EOF」は End Of File、「EOD」は End Of Document の略です。改行
<html> <head> <title>PHPの基礎知識をまとめてみた</title> </head> <body> <?php echo "1行目:改行して出力<br />"; echo "2行目:改行後の文字列"; ?> </body> </html> <?php echo "1行目\n"; echo "2行目"; ?>ブラウザ上での改行は、
<br />とHTMLタグを入れます。ソース上での改行は、\nを入れます。文字列のエスケープ
非文字列エスケープの例echo "<a href="http://php.net/manual/ja/index.php">PHPマニュアル</a>"; //Parse error: parse error, expecting `','' or `';'' inこれたど、
echo "文字列"の括りの中にさらに"が入っている為、エラーが出ます。
これを回避するには、エスケープ文字\を使います。エスケープ文字は重複する"の前に付けます。文字列エスケープの例echo "<a href=\"http://php.net/manual/ja/index.php\">PHPマニュアル</a>"; //PHPマニュアル変数編
変数というのは値を保持しておく箱だと思って下さい。
値を保持しておいて後から計算に使ったり、取り出して表示したりすることができます。変数
$num = 1; echo $num; //1 $str = "Hello World"; echo $str; //Hello World変数は、
$変数名 = 値で宣言します。ポイントは、変数の前に$を付けること。
ちなみにPHPでは型の定義を勝手にしてくれます。つまり、Javaみたいに型の定義を宣言する必要が無いです。ただし、変数には命名規則があるので気を付けましょう。
文字列と変数の結合
$str = "文字列"; echo `私の名前は、`.$str; //私の名前は、太郎文字列結合演算子
.を使うことで、文字列と変数を結合できます。変数の参照渡し
非参照渡しの例$a = 1; $b = $a; $a = 2; echo $b; //1PHPが
$aと$bを違う変数として扱っているため、$aの値を変更しても$bの値は元の「1」を保持したままです。
これを参照渡しを使うことで、$aと$bを「違う名前を持つ同じ変数」として扱えるようにできます。
参照渡しを使うにはアンパサンド&を使います。&を代入する方の変数の$前に付けます。参照渡しの例$a = 1; $b = &$a; //アンパサンドを使う $a = 2; echo $b; //2変数のスコープ
※関数を理解していないと躓くと思うので、とりあえずこういうのがあるんだ程度で覚えといて下さい。
function outputInfo($name){ $pet = "猫"; //ローカルスコープ echo $name."さんは".$pet."を飼っています” } outputInfo("山田"); echo $pet."は可愛いですね";出力結果//山田さんは猫を飼っています //undefined~ は可愛いですね変数の使える範囲を
スコープと言います。
P関数内で作成した変数は、ローカルスコープと呼ばれ、その関数内でしか参照できません。ローカル変数をグローバルスコープでも使えるようにするためには、グローバル宣言をする必要があります。
グローバル宣言はglobal 変数名;で宣言することができます。function outputInfo($name){ global $pet; $pet = "猫"; echo $name."さんは".$pet."を飼っています” } outputInfo("山田"); echo $pet."は可愛いですね";出力結果// 山田さんは猫を飼っています // 猫は可愛いですね定数編
定数というのは、変数に対して変更してはいけない値を保持しておくものです。消費税とか円周率とか。
定数
define(`PI`, 3.14); echo PI; //3.14定数は、
defineで宣言します。変数と違って$を付ける必要はありません。
慣習的に、定数は常に大文字で表記されます。ちなみに、定数のスコープはグローバルなので、PHPスクリプト中どこでも定数にアクセスできます。
演算子編
演算子というのは、プログラミングで計算や判定をしたりするのに使われる記号のことです。
算術演算子
$a + $b // 加算 $a - $b // 減算 $a * $b // 乗算 $a / $b // 除算 $a % $b // $a を $b で割った余り小学校で習った算数と同じですね。数値を足したり引いたりするための演算子です。
加算子(インクリメント)/減算子(デクリメント)
$a++ // $a の値をひとつ加算する(変数を返し、変数に+1を加えます。) $a-- // $a の値をひとつ減算する(変数を返し、変数から-1を引きます。) ++$a // $a の値をひとつ加算する(変数に+1を加え、変数を返します) --$a // $a の値をひとつ減算する(変数から-1を引き、変数を返します)数の値を「+1」「-1」にする演算子です。インクリメント演算子とデクリメント演算子と言います。
インクリメント/デクリメント演算子を変数の前/後に付けた場合で挙動が異なるので、注意しましょう。文字列演算子
$a . $b // 文字列 $a と文字列 $b を連結文字列を結合する演算子です。連結したい文字列や変数の間にドット「.」を挟みます。
代入演算子
$a = $b // 代入 $a += $b // $a = $a + $b に同じ $a -= $b // $a = $a - $b に同じ $a *= $b // $a = $a * $b に同じ $a /= $b // $a = $a / $b に同じ $a %= $b // $a = $a % $b に同じ $a &= $b // $a = $a & $b に同じ $a |= $b // $a = $a | $b に同じ $a ^= $b // $a = $a ^ $b に同じ $a <<= $b // $a = $a << $b に同じ $a >>= $b // $a = $a >> $b に同じ $a .= $b // $a = $a . $b に同じ変数に値を代入する演算子です。
比較演算子
$a == $b // $a と $b が等しい $a === $b // $a と $b が等しい(型を厳密に比較する) $a != $b // $a と $b が等しくない $a <> $b // $a と $b が等しくない $a !== $b // $a と $b が等しくない(型を厳密に比較する) $a < $b // $a が $b よりも小さい $a > $b // $a が $b よりも大きい $a <= $b // $a が $b 以下である $a >= $b // $a が $b 以上である後で出てきますが、if、for、while の条件分岐に利用する演算子です。
論理演算子
$a and $b // $a かつ $b が TRUE であれば $a && $b // $a かつ $b が TRUE であれば $a or $b // $a または $b が TRUE であれば $a || $b // $a または $b が TRUE であれば !$a // $a が FALSE であれば $a xor $b // $a まはた $b どちらか片方のみが TRUE であれば論理演算を行うための演算子です。
配列編
配列というのは、複数の値を入れられる箱だと思って下さい。
変数は1度に1つの値しか保持できませんが、配列を使えば1つの変数に複数の異なる値を保持する事ができます。配列
$family = ['dad', 'mom', 'son', 'daughter']; // $familyは配列 echo $family[0]; //dad echo $family[1]; //mom echo $family[2]; //son echo $family[3]; //daughter変数では1つの変数に1つの値しか保持(代入)する事ができませんが、配列を使えば1つの変数に複数の値を保持する事ができます。
配列は、array[値1,値2,...]で使うことが出来ます。連想配列
$family_name = [ 'dad' => 'taro', 'mom' => 'hanako', 'son' => 'saburo', 'daughter' => 'siro' ]; echo $family_name['dad']; // 'taro'配列では、[ ]の中は、0,1,2...の数字の順番でしたが、数字ではなく文字のキーをもとにして値を設定した配列を連想配列と呼びます。
連想配列は、配列名 = array[キー1 => 値1, キー2 => 値2, ... ];で使うことができます。制御構造編
上から順番に処理していく単純なプログラムではなく、条件によって処理内容を変更したり、同じ文を何回も実行したりする事、つまりプログラムの流れを制御するものを制御構造と言います。
条件分岐(if文)
条件分岐$num = 5; if ($num > 3) { echo "変数numの内容は3より大きいです"; //条件に一致した場合に実行する処理 } else { echo "変数numの内容は3より小さいです"; //条件に一致しなかった場合に実行する処理 } // 変数numの内容は3より大きいです条件式の部分がTRUEであれば処理を実行し、FALSEであれば実行せずに無視します。
条件の複数指定$num = 5; if (num == 10) { echo "変数numの内容は5です。"; } elseif ($num > 2) { echo "変数numの内容は2より大きいです。"; } else { echo "変数numの内容は2より小さいです。"; }条件を複数指定したい場合は、
elseifを使います。真偽値の判定$num = TRUE; if ($num === TRUE) { echo "変数numの内容は真です。"; //条件に一致した場合に実行する処理 } if ($num === FALSE) { echo "変数numの内容は偽です。"; //条件に一致しなかった場合に実行する処理 }上記のように、
TRUEとFALSEを判定することもできます。AND条件とOR条件$num_a = 2; $num_b = 4; if ($num_a == 2 and $num_b == 4) { echo " 変数num_aは2、変数num_bは4です。"; //条件に一致した場合に実行する処理 } else { echo " 条件に一致しません。"; //条件に一致しなかった場合に実行する処理 }数の条件を組み合わせて1つの条件にすることもできます。
Switch文
$i = 1; switch ($i) { //{}は繰り返し行う処理 case 0: echo "iは0に等しい"; //実行する処理1 break; case 1: echo "iは1に等しい"; //実行する処理2 break; case 2: echo "iは2に等しい"; //実行する処理3 break; }
break;で処理から抜けることができます。もしbreak;が無い場合、case 0:つまり、$iが0に等しい場合は、全てのecho文を出力してしまいます。$iが1の場合、最後の2つのecho文を出力してしまうので注意です。ループ処理(while文)
通常のwhile文$i = 1; while( $i <= 10 ){ //iが10を超えると処理を終了する echo $i++."<br />\n"; } //1から10まで改行されて出力されるwhile文は、条件式の値がTRUEの間ループ処理を実行しつづけます。条件式が初めからFALSEの時はループ処理は一回も実行されません。
do-while文$i = 1; do{ echo $i++."<br />\n"; //繰り返し判定を行う前に一度処理が実行される } while( $i >= 10 ); //1while文は、条件式が初めからFALSEの時はループ処理は一回も実行されませんが、必ず1回は処理を行う場合にはdo..while文を使うことができます。
ループ処理(for文)
for( $i = 1; $i<= 10; $i++ ){ echo $i."<br />\n"; //改行しながら値を表示 } //1から10まで改行されて出力されるfor分は、「条件式」の値がTRUEの場合、ループ処理を実行しつづけます。「条件式」がFALSEの時はループ処理の実行を終了します。
While文とfor文で同じような処理が行えますが、使い分けるポイントはこちらの記事が参考になりました。
繰り返す回数があらかじめわかっている ⇒ for繰り返す回数があらかじめわからない ⇒ whileループ処理(foreach文)
$family_name = [ 'dad' => 'taro', 'mom' => 'hanako', 'son' => 'saburo', 'daughter' => 'siro' ]; foreach($family_name as $value){ //$family_nameを$valueに代入 echo $value; } ///tarohanakosaburosiroforeach文は配列用のループ処理です。要素数が多い配列や、データベースにある大量の情報を順に取り出したい時に使えます。
continue文
$family = ['dad', 'mom', 'son', 'daughter']; // $familyは配列 foreach ($family as $value){ if($value == "mom"){ continue; }else{ echo $value; } } //dadsondaughtercontinue文を使うと、ループ構造の中で現在のループ処理をスキップし、次のループから処理を続けることができます。
これらのループ処理はイメージで理解すると分かり易いかと思います。こちらが参考になりました。