- 投稿日:2020-07-11T22:20:41+09:00
特定のvalueを持つkeyだけ出力
引き続きこちらのデータを使う
PHPの連想配列を使ってポケモン図鑑を作ってみた$pokemon = [ 'フシギダネ' => 'くさ', 'フシギソウ' => 'くさ', 'フシギバナ' => 'くさ', 'ヒトカゲ' => 'ほのお', 'リザード' => 'ほのお', 'リザードン' => 'ほのお', 'ゼニガメ' => 'みず', 'カメール' => 'みず', 'カメックス' => 'みず', 'キャタピー' => 'むし', 'トランセル' => 'むし', 'バタフリー' => 'むし', 'ビードル' => 'むし', 'コクーン' => 'むし', 'スピアー' => 'むし', 'ポッポ' => 'とり', 'ピジョン' => 'とり', 'ピジョット' => 'とり', 'コラッタ' => 'ノーマル', 'ラッタ' => 'ノーマル', 'オニスズメ' => 'とり', 'オニドリル' => 'とり', 'アーボ' => 'どく', 'アーボック' => 'どく', 'ピカチュウ' => 'でんき', 'ライチュウ' => 'でんき', 'サンド' => 'じめん', 'サンドパン' => 'じめん', 'ニドラン♂' => 'ノーマル', 'ニドリーノ' => 'ノーマル', 'ニドキング' => 'ノーマル', 'ニドラン♀' => 'ノーマル', 'ニドリーナ' => 'ノーマル', 'ニドクイン' => 'ノーマル', 'ピッピ' => 'ノーマル', 'ピクシー' => 'ノーマル', 'ロコン' => 'ほのお', 'キュウコン' => 'ほのお', 'プリン' => 'ノーマル', 'プクリン' => 'ノーマル', 'ズバット' => 'あく', 'ゴルバット' => 'あく', 'ナゾノクサ' => 'くさ', 'クサイハナ' => 'くさ', 'ラフレシア' => 'くさ', 'パラス' => 'くさ', 'パラセクト' => 'くさ', 'コンパン' => 'むし', 'モルフォン' => 'むし', 'ディグダ' => 'じめん', 'ダグトリオ' => 'じめん', 'ニャース' => 'ノーマル', 'ペルシアン' => 'ノーマル', 'コダック' => 'みず', 'ゴルダック' => 'みず', 'マンキー' => 'かくとう', 'オコリザル' => 'かくとう', 'ガーディ' => 'ほのお', 'ウインディ' => 'ほのお', 'ニョロモ' => 'みず', 'ニョロゾ' => 'みず', 'ニョロモン' => 'みず', 'ケーシィ' => 'エスパー', 'ユンゲラー' => 'エスパー', 'フーディン' => 'エスパー', 'ワンリキー' => 'かくとう', 'ゴーリキー' => 'かくとう', 'カイリキー' => 'かくとう', 'マダツボミ' => 'くさ', 'ウツドン' => 'くさ', 'ウツボット' => 'くさ', 'メノクラゲ' => 'みず', 'ドククラゲ' => 'みず', 'イシツブテ' => 'じめん', 'ゴローン' => 'じめん', 'ゴローニャ' => 'じめん', 'ポニータ' => 'ほのお', 'ギャロップ' => 'ほのお', 'ヤドン' => 'みず', 'ヤドラン' => 'みず', 'コイル' => 'でんき', 'レアコイル' => 'でんき', 'カモネギ' => 'とり', 'ドードー' => 'とり', 'ドードリオ' => 'とり', 'パウワウ' => 'みず、こおり', 'ジュゴン' => 'みず、こおり', 'ベトベター' => 'どく', 'ベトベトン' => 'どく', 'シェルダー' => '氷', 'パルシエン' => '氷', 'ゴース' => 'ゴースト', 'ゴースト' => 'ゴースト', 'ゲンガー' => 'ゴースト', 'イワーク' => 'いわ', 'スリープ' => 'エスパー', 'スリーパー' => 'エスパー', 'クラブ' => 'みず', 'キングラー' => 'みず', 'ビリリダマ' => 'でんき', 'マルマイン' => 'でんき', 'タマタマ' => 'くさ、エスパー', 'ナッシー' => 'くさ、エスパー', 'カラカラ' => 'じめん', 'ガラガラ' => 'じめん', 'サワムラー' => 'かくとう', 'エビワラー' => 'かくとう', 'ベロリンガ' => 'ノーマル', 'ドガース' => 'どく', 'マタドガス' => 'どく', 'サイホーン' => 'じめん', 'サイドン' => 'じめん', 'ラッキー' => 'ノーマル', 'モンジャラ' => 'くさ', 'ガルーラ' => 'ノーマル', 'タッツー' => 'みず', 'シードラ' => 'みず', 'トサキント' => 'みず', 'アズマオウ' => 'みず', 'ヒトデマン' => 'みず', 'スターミー' => 'みず', 'バリヤード' => 'エスパー', 'ストライク' => 'むし', 'ルージュラ' => 'こおり、エスパー', 'エレブー' => 'でんき', 'ブーバー' => 'ほのお', 'カイロス' => 'むし', 'ケンタロス' => 'ノーマル', 'コイキング' => 'みず', 'ギャラドス' => 'みず', 'ラプラス' => 'みず', 'メタモン' => 'ノーマル', 'イーブイ' => 'ノーマル', 'シャワーズ' => 'みず', 'サンダース' => 'でんき', 'ブースター' => 'ほのお', 'ポリゴン' => 'エスパー', 'オムナイト' => 'みず、じめん', 'オムスター' => 'みず、じめん', 'カブト' => 'みず、じめん', 'カブトプス' => 'みず、じめん', 'プテラ' => 'じめん、ドラゴン', 'カビゴン' => 'ノーマル', 'ファイヤー' => 'ほのお', 'ファイヤー' => 'ほのお', 'サンダー' => 'でんき', 'フリーザー' => '氷', 'ミニリュウ' => 'ドラゴン', 'ハクリュー' => 'ドラゴン', 'カイリュウ' => 'ドラゴン', 'ミュウツー' => 'エスパー', 'ミュウ' => 'エスパー' ];ここから特定のタイプのポケモンだけを全部出力したい。
1 : foreach文を使う
2 : if文を使う
3 : valueが特定のタイプじゃなかったら、ループを抜けるようにif文の処理を書く
まずforeach
foreach ($pokemon as $name => $type) { echo $name; echo '<br/>'; }次、条件分岐
foreach ($pokemon as $name => $type) { if(//条件) { //処理 } echo $name; echo '<br/>'; }完成系
foreach ($pokemon as $name => $type) { if($type !== 'エスパー') { continue; } echo $name; echo '<br/>'; }とても気持ち良い。!
- 投稿日:2020-07-11T21:08:09+09:00
DJ機材を使ってDI(依存性注入)を完全に理解した(前準備編)
はじめに
最近 symfony(php) を仕事で使うようになって出てくるようになったDIをまとめる。
例によって3分程度で読む記事です。この記事の目的は、DI自体を理解するための前準備です。DIの記事には単体テストしたいよねという記事がよく出てくるが、そもそもDIに紐づく『インターフェース』がよくわかってなかったんだよな。妙に遠回りするような物言いで。なら実際のもので置き換えてみようと思いました。DJ機材の中心といえばこれ
https://www.soundhouse.co.jp/products/detail/item/226510/
DJ機材にものすごく入れ込んでるときはチャンネル数が多いものを『いいものだ』と思ってどんどん買い換えようとするんだけどスキルがこなれるほど2chでいんじゃね?ってなるよね。まぁそれはどうでもいいんだけどキー・アイテムはこれ
NEUTRIK ( ノイトリック ) / NDJ
そう、別名ダミーキャップだ。インターフェースとは
インターフェースとはギアスです。最大に効果を発揮する場面は、大規模開発で人がたくさんいるような場合に、取り決めだけを作ることができるということです。取り決めをしたメソッドが無いような場合に、コンパイラが「エラーを出すことができる(そんな命令ねーよ!)」これがインターフェースの最大の利益です。人為的なコンパイルエラーを作ることができる、と。
ダミーキャップの目的とインターフェース、DIの関係
さてダミーキャップは、機材を守るという意味もあるが、今回のダミーキャップと機材の関係の本質は「あたかもそこに機材がつながっているように振る舞う」ことです。プログラミングで使われる「インターフェース」とは、『端子の構造(=型)を守れという抽象的な取り決め』だ。プラグの型さえ合っていれば、たとえ今はダミーで意味はなくてもそこに『phone端子のなにかとつながった!』という関係性が成立します。全く意味はないけどそういうふうに作れば、phone端子の先にアイロンがくっついててもいいわけです。
Dependency Injection(DI)について
DIは「依存性の注入」と書かれますが、これは非常にわかりにくいことで有名な表現です。DIの本質は「オブジェクトを(クラスの中に)インストールする」ことです(別の言い方をすると責任の外だし)。「依存性の注入」を別のものに例えると「ロックマン」です。敵の能力をDI(武器をロックマン用に合わせこんで[=インターフェース])して、敵の武器を扱い(メソッド)ます。これがDIの勘所であります。責任を外出しするという表現が使われるのは、抽象的な概念(インターフェース)しかそこにはないからです。
ここで学んだあとに見るURL
- 投稿日:2020-07-11T19:38:15+09:00
DockerでLAMP&Redis環境を構築しながら、色々使い方を覚える(備忘録)
もし不明なところや、間違いとかがあればご指摘頂けると幸いです。
やること
php-fpm(php7.4) centos7 apache2.4 mariadb phpMyadmin nodejs (with Gulp) redis
- 上記の環境をDockerで構成する
- Dockerfileと各環境の設定ファイルを構成する
- docker-compose.ymlを構成する
- docker-composeで各環境のコンテナーを起動し内部状態を確認する
- Laravel上で、MariaDBとRedisのコネクションを確認する
全体ソースコード
https://github.com/genie-oh/docker-lamp
参考にした記事&Github レポジトリ
https://qiita.com/temori1919/items/487d68a19ca1de1a63c8
https://github.com/temori1919/docker-lamp基本レファレンス
Dockerfileのレファレンス
https://docs.docker.com/engine/reference/builder/Docker Composeのレファレンス
https://docs.docker.com/compose/compose-file/1. Docker構成
1) web構成 (centos & apache)
公式 dockerhub
https://hub.docker.com/_/centos構造
docker-lamp/ `-- web | |-- Dockerfile | |-- docker.conf # Copy to /etc/httpd/conf.d | `-- logs # for apache logweb/docker.conf
Apacheのconfig。
主にバーチャルホスト関連設定を定義する。
phpの処理はphp-fpmに任せるのでproxy設定をしておく。# rootdomain <VirtualHost *:443> ... ServerName lamplocal.me VirtualDocumentRoot /var/www/html/home_root/public ... </VirtualHost> # subdomain. phpの動作が可能 <VirtualHost *:443> ... ServerName lamplocal.me ServerAlias *.lamplocal.me VirtualDocumentRoot /var/www/html/home_sub/%1/public <FilesMatch \.php$> SetHandler "proxy:fcgi://php:9000" </FilesMatch> ... </VirtualHost>web/Dockerfile
apache.2.4のインストール
任意のSSL認証書を作成
docker.confをコンテナーにコピー# centos:7のイメージを元にコンテナーを作成 FROM centos:7 # 指定のコマンド実行 RUN ... # ホストシステムからコンテナーにファイルをコピー COPY docker.conf /etc/httpd/conf.d/docker.conf # コンテナー起動時に実行するコマンド CMD ["/usr/sbin/httpd", "-DFOREGROUND"]2) php構成 (php-fpm 7.4)
公式 dockerhub
https://hub.docker.com/_/php構造
docker-lamp/ |-- php | |-- Dockerfile | |-- logs # For xdebug.log | `-- xdebug.ini # Copy to /usr/local/etc/php/conf.dxdebug.ini
xdebugの基本設定の他に、xdebug.logを残すように設定
xdebug.remote_log=/var/log/xdebug/xdebug.logDockerfile
# php:7.4-fpmのイメージを元にコンテナーを作成 FROM php:7.4-fpm # phpのイメージで提供するユティリティの`docker-php-ext-install`,`docker-php-ext-enable`でPHP EXTENSTIONを設置 RUN pecl install xdebug-2.8.1 \ && docker-php-ext-enable xdebug \ && docker-php-ext-install bcmath pdo_mysql # ホストシステムからコンテナーにファイルをコピー COPY ./xdebug.ini $PHP_INI_DIR/conf.d/ # 外部イメージから、コンテナーにファイルをコピー # 公式composerイメージから、phpコンテナーにcomposerを設置 COPY --from=composer:latest /usr/bin/composer /usr/bin/composer3) mariaDB構成
公式 dockerhub
https://hub.docker.com/_/mariadb構造
docker-lamp/ |-- db | |-- Dockerfile | |-- logs # For slow query log | `-- my.cnf # Copy to /etc/mysql/conf.dmy.cnf
参考記事
https://qiita.com/mamy1326/items/9c5eaee3c986cff65a55charsetや、slow query log、wait timeout、その他innodb関連設定
default-character-set=utf8mb4 character-set-server=utf8mb4 # slow query log slow_query_log=true slow_query_log-file=/var/log/mysql/mysql-slow.sql long_query_time=1 # コネクションタイムアウト時間 wait_timeout=28800Dockerfile
FROM mariadb COPY my.cnf /etc/mysql/conf.d/my.cnf4) redis構成
公式 dockerhub
https://hub.docker.com/_/redis構成
docker-lamp/ |-- redis | |-- Dockerfile | |-- data # for redis data | |-- logs # for redis log | `-- redis.conf # Copy to /usr/local/etc/redis/redis.confredis.conf
redis-serverの設定
参考記事
https://qiita.com/uryyyyyyy/items/9ccadcccf7f7060d544aredisのログを残すように設定
logfile "/var/log/redis/redis-server.log"Dockerfile
FROM redis RUN mkdir /var/log/redis COPY ./redis.conf /usr/local/etc/redis/redis.conf CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]5) nodeの構成
公式 dockerhub
https://hub.docker.com/_/node構成
|-- node | `-- DockerfileDockerfile
FROM node:latest RUN npm install -g gulp@3.9.1 gulp-phpunit config && \ npm install gulp@3.9.1 gulp-phpunit config && \ apt-get -y update && \ apt-get -y upgrade && \ apt-get -y install ca-certificates apt-transport-https && \ wget -q https://packages.sury.org/php/apt.gpg -O- | apt-key add - && \ echo "deb https://packages.sury.org/php/ stretch main" | tee /etc/apt/sources.list.d/php.list && \ apt-get -y update && \ apt-get -y install php7.2 php7.2-cli php7.2-common php7.2-opcache php7.2-curl php7.2-mbstring php7.2-mysql php7.2-zip php7.2-xml WORKDIR /var/www/html2. document root構成
docker-lamp/ |-- code # -- Mounted on /var/www/html | |-- config | | `-- default.json.example | |-- gulpfile.js | |-- home_root # -- root home | | `-- public # documentroot of lamplocal.jp | | `-- index.html # can run only static contents. | |-- home_sub # -- virtual host home | | `-- test # you can add directory & use by subdomain | | `-- public # documentroot of test.lamplocal.jp | | `-- index.php # can run php script | `-- nodeapp3. docker-compose.yml構成
version: '3.7' services: # centos7 apache2.4.*(http2) web: build: ./web container_name: lamp-web ports: - '443:443' volumes: - ./code:/var/www/html - ./web/logs:/var/log/httpd - cert:/etc/ssl/private restart: always env_file: .env # php-fpm 7.4 php: build: ./php container_name: lamp-php ports: - '9000' volumes: - ./code:/var/www/html - ./php/logs:/var/log/xdebug restart: always env_file: .env # mariaDB db: build: ./db container_name: lamp-db restart: always env_file: .env ports: - 3306:3306 volumes: - ./db/logs:/var/log/mysql - datastore:/var/lib/mysql # phpMyadmin phpmyadmin: container_name: lamp-phpmyadmin image: phpmyadmin/phpmyadmin env_file: .env ports: - 8080:80 depends_on: - db # node js (include gulp) node: build: ./node container_name: lamp-node restart: always tty: true environment: - NODE_ENV=production ports: - '3000:3000' volumes: - ./code:/var/www/html depends_on: - web # redis server redis: build: ./redis container_name: lamp-redis restart: always ports: - '6379:6379' volumes: - "./redis/data:/data" - "./redis/logs:/var/log/redis" volumes: cert: datastore:4. 動作確認
aliasを使っていますが、実行コマンドは
execute :
で出力しているので参考にしてください。alias設定の内容と各命令の解説はこちらを参考できます。
https://qiita.com/genie-oh/items/266857d788a85e2da8f91) build
$ al docki execute : docker images REPOSITORY TAG IMAGE ID CREATED SIZE $ al dockcb execute : docker-compose build phpmyadmin uses an image, skipping Building web ... ... Successfully built 43bb05ec0f39 Successfully tagged docker-lamp_redis:latest $ al docki execute : docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker-lamp_redis latest 43bb05ec0f39 About a minute ago 104MB docker-lamp_node latest 1cffc83ebe6f About a minute ago 1.06GB docker-lamp_db latest e112492cc9c2 4 minutes ago 407MB docker-lamp_php latest 5a3452fcbf58 4 minutes ago 671MB docker-lamp_web latest 9af33e8e4219 9 minutes ago 540MB ...2) run containers
$ al dockcu execute : docker-compose up -d ... Status: Downloaded newer image for phpmyadmin/phpmyadmin:latest Creating lamp-web ... done Creating lamp-php ... done Creating lamp-redis ... done Creating lamp-db ... done Creating lamp-node ... done Creating lamp-phpmyadmin ... done $ al dockps execute : docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ea93226c6b49 phpmyadmin/phpmyadmin "/docker-entrypoint.…" 17 seconds ago Up 14 seconds 0.0.0.0:8080->80/tcp lamp-phpmyadmin 52a68fde7bdd docker-lamp_node "docker-entrypoint.s…" 17 seconds ago Up 14 seconds 0.0.0.0:3000->3000/tcp lamp-node 13e52a01700e docker-lamp_php "docker-php-entrypoi…" 19 seconds ago Up 16 seconds 0.0.0.0:32837->9000/tcp lamp-php 43eb81b6410e docker-lamp_web "/usr/sbin/httpd -DF…" 19 seconds ago Up 15 seconds 0.0.0.0:443->443/tcp lamp-web 473ffaf3439b docker-lamp_redis "docker-entrypoint.s…" 19 seconds ago Up 15 seconds 0.0.0.0:6379->6379/tcp lamp-redis ae80a8fd00c6 docker-lamp_db "docker-entrypoint.s…" 19 seconds ago Up 15 seconds 0.0.0.0:3306->3306/tcp lamp-db3) access web
$ curl -k https://lamplocal.me --silent | grep "<title>" <title>Hello World</title> $ curl -k https://test.lamplocal.me --silent | grep "<title>" <title>PHP 7.4.7 - phpinfo()</title><meta name="ROBOTS" content="NOINDEX,NOFOLLOW,NOARCHIVE" /></head>4) check each package version in container
$ al dockeit lamp-web httpd -v execute : docker exec -it lamp-web httpd -v Server version: Apache/2.4.41 (IUS) Server built: Aug 25 2019 19:41:04$ al dockeit lamp-php php -v execute : docker exec -it lamp-php php -v PHP 7.4.7 (cli) (built: Jun 11 2020 18:41:17) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Xdebug v2.8.1, Copyright (c) 2002-2019, by Derick Rethans$ al dockeit lamp-db mysql --version execute : docker exec -it lamp-db mysql --version mysql Ver 15.1 Distrib 10.5.4-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2$ al dockeit lamp-redis redis-server -v execute : docker exec -it lamp-redis redis-server -v Redis server v=6.0.5 sha=00000000:0 malloc=jemalloc-5.1.0 bits=64 build=db63ea56716d515f$ al dockeit lamp-node node -v execute : docker exec -it lamp-node node -v v14.5.05) down containers
$ al dockcd execute : docker-compose down Stopping lamp-phpmyadmin ... done Stopping lamp-node ... done Stopping lamp-php ... done Stopping lamp-web ... done Stopping lamp-redis ... done Stopping lamp-db ... done Removing lamp-phpmyadmin ... done Removing lamp-node ... done Removing lamp-php ... done Removing lamp-web ... done Removing lamp-redis ... done Removing lamp-db ... done Removing network docker-lamp_default6) 特定コンテナーのみ実行
$ dockcu php db Creating network "docker-lamp_default" with the default driver Creating lamp-php ... done Creating lamp-db ... done7) php, mariadb, redis 連携確認
laravelをインストールし、各コネクションを確認
# docker-lamp\code\home_sub\cgi\.env DB_CONNECTION=mysql DB_HOST=lamp-db DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=root DB_PASSWORD=rootpw REDIS_HOST=lamp-redis REDIS_PASSWORD=null REDIS_PORT=6379# docker-lamp\code\home_sub\cgi\app\Http\Controllers\TestController.php <?php namespace App\Http\Controllers; use Illuminate\Support\Facades\Redis; use Illuminate\Support\Facades\DB; class TestController extends Controller { public function index () { $redisResult = Redis::connection()->ping('redis pong'); $dbResult = DB::table('test')->get(); return view('test/index', compact('redisResult', 'dbResult')); } }$ curl -k https://cgi.lamplocal.me/test redisResult : redis pong dbResult : [{"id":0,"name":"abc"}]後書き
- 違うプラットフォームの開発完了などをDockerでコード化しておくと、いろんな開発環境に柔軟に対処できるのはいい。
- PythonやJava、Full Stack Javascript環境も構成してコード化しておきたい。
- 機会があれば、Dockerイメージのサービスデプロイ&運用も勉強したい。(Kubernate, AWS ECS)
- 投稿日:2020-07-11T19:29:01+09:00
学習したことを投稿していきます
完全未経験からプログラミングを学習しています。
投稿の目的
1. 自分の理解を深めるため
2. 自分の積み上げを確認するため
3. 自分のような完全未経験の視点から情報を発信することで同じ視点の方の役に立てると考えたからMarkdown記法もしっかり使い、自分の理解を深めるため、また、学習を始めた頃の自分が知りたかったことを投稿していきたいと思います。
間違い等無いように気を付けますが、何かありましたらご指摘いただけたら嬉しいです。
- 投稿日:2020-07-11T17:49:02+09:00
[PHP] Markdownも書ける掲示板「ぼやログ」を作ってみた
これなに
自粛期間中遠隔授業で暇を持て余し,思いつきで匿名掲示板「ぼやログ」を作成した記録です。
ぼくのかんがえたさいきょうの掲示板を作ろうと思って没頭していたら,ポストするカードの枠線色を変えたりMarkdown記法が使えたり出来るようになっちゃったサービスです。
他に同じようなサービスを作りたいと思っている方や勉強等に役立てれば幸いです。開発環境
- Windows 10 Pro
- VisualStudio Code
- Pluginもりもりのやつ
- Powershell
- XAMPP
- 自分の好きなキーボード (だいじ)
いずれも記事作成時点で最新のstable版を利用
利用したサービス
今回はサービスをローンチさせるために,無料でPaaSを利用できるherokuを選びました。
またDBも同様にherokuの無料プランを利用しています。herokuについての詳細は記事下部の参考からどうぞ。
「ぼやログ」について
名前の由来は私がとある短文投稿サイト1の情報量の多さに疲れて引退,しかし普段のちょっとした"ぼやき"は投稿したい....そんな作成者の願いを叶えるために生まれました。
デザインはMaterial Designをちょっとだけ参考にした独自のデザイン,背景色とアクセントのブルーは今は亡きCyanogenmod.incのbackgroundとaccentをパクって参考にさせていただきました。ぼやログ画面
投稿は右上のプラスボタンからできます。
スマホでのビュー
できること
Markdown記法による文章記述
Parsedown
ParsedownというPHPで使えるMarkdown Parserを組み込んでいます。
Parsedownの利用できるMarkdown方言は次の通り:
- Github flavored Markdown
- Markdown Extra
GitHub Markdown CSS
Markdown記述用のCSSはGitHub Markdown CSSが適用されます。
Highlight.js
さらにさらに,Markdown内のコードブロックにはSyntax Highlightも適用されます。
テーマはAtom One Darkに設定しています。かっこいい!ポストするカードのカラー変更
これは既存のサービスにはない独自の機能をつけたいと思い考えていた結果,投稿した文字色でなく投稿そのものに色を付けることができるのは魅力的ではないか?と
トイレで思いつき実装しました。
画像はポストフォームと,グリーンに指定されたポストです。
ポスト削除
あたりまえですが,ポストの削除も出来ます。削除はポスト時間横のゴミ箱アイコンです。
ただ,記事作成時点では削除ボタンを押すと一発で投稿が削除される仕様です。ご利用は計画的にできないこと・実装予定
Markdown記法による一部の表現
確認したところだと,
<details>
タグ,および<summary>
タグが利用できませんでした。
おそらくParsedownの設定の問題で,投稿内のhtmlのタグがはじかれているからでしょう。
これは今後セッティングにより対応可能になるかと思います。
他にも表現できないものがあるかと思いますが,確認中です。過去30ポスト以前の参照
これはページャーを実装することにより参照が可能になりますが,クリックするタイプのページャーはこのサイトにはUX的に相性が悪いので,無限スクロールで対応を検討中です。(infinite-scrollとかajaxとか)
が,作成者の知識不足で未だ実装には至っていません。画面更新なしの投稿・更新・削除
これはポーリングやロングポーリング,Websocketによって実装可能で,実際にテストしたところ投稿機能は動作しました。
が,どの技術を利用するにしても現在の無料サーバでは実現困難でした。(herokuにおこられちゃう)
今後利用者が増えれば資金を出して実装できます。ポストに対するコメント
要望があれば(利用者が増えれば)検討します。
ポスト内容の編集
でも削除できるからいらないでしょ?(怠惰)
セキュリティ
これに関しては作成者は未だに不安です。
このサイトに導入されているセキュリティのフロートしては,
- [ぼやぼや]送信
htmlspecialchars
でHTMLエンティティ化- DBに保存
- DBから取り出し,
htmlspecialchars_decode
でデコード- Parsedownの
setSafeMode
をtrue
にしてMarkdownからHTMLにパースという流れです。が,現状この方法ではDBに保存する前に文字列のまま出力してしまっているので,SQLインジェクションが可能です。
ただこのサイトは完全匿名でログイン等がないので,悪くても投稿全削除とかサーバ荒らしとかでしょう。
サーバには無料プランだと同時接続数や遅れるクエリの数が制限されるかと思いますのでたぶんいまのとこ大丈夫。(甘い)対応策としてはHTMLエンティティ化の代わりに入力された値をハッシュかなんかに変換しちゃえば問題ないかと思います。
また描画する際もParsedownに頼り切っているので,セキュリティホールを突けばXSSも可能です。
対応策として,ParsedownのHPにも記載されている通りにCSPも導入するなどしたほうが良さそうです。In both cases you should strongly consider employing defence-in-depth measures, like deploying a Content-Security-Policy (a browser security feature) so that your page is likely to be safe even if an attacker finds a vulnerability in one of the first lines of defence above.
Parsedownさいごに
思いついた瞬間から作り始めましたが当方HTMLとPHP(それもちょっと)くらいしか知識がなかったので他のJSやgitについては実際に動かしながら学びました。
動かしていく上で必要な情報を集めるにつれ,様々なソリューションや知見に触れることが出来ました。
またサーバとやり取りする時に重要なセキュリティに対する考えや対応策なども,言葉自体は知っていたが実際にどうなるのかなどを身を以て実感させられました。
このサービスを作って得た知識や考えは今後,他のサービスを触ったり運用するための大きな勉強になったかと思います。参考・リンク
めちゃめちゃお世話になった投稿
後はわかるな? ↩
- 投稿日:2020-07-11T16:27:17+09:00
PHP ビルドイン関数を学ぼう
PHP の ビルドイン関数
phpには私たちが全てを1から実装しなくても良いように、
初めから用意されている関数がたくさんあります。それらをビルトイン関数といいます。
ビルトイン関数はたくさんあります。
今回はいくつか紹介します。はじめに
これは初心者エンジニアから、フルスタックエンジニアになるための備忘録である
目次
1 strlen
2 str_replace
3 count
4 asort,arsort
5 strip_tags
6−1 array_push
6−2 array_push関数で連想配列に値を追加する
7 array_merge
8 time,mktime
9 date1 strlen : 文字の長さを取得する
<?php $string = "ABCDEF"; echo strlen($string); //=> 6 と表示される ?>2 str_replace : 文字列を置換する
<?php $string = "I love Ruby!"; // Ruby という文字列を PHP に置換する 最初に変える文字 ▶︎その後に置換する文字 ▶︎ 元の書式(変数) $new_string = str_replace("Ruby", "PHP", $string); echo $new_string; //=> I love PHP! ?>3 count : 配列の要素の個数を取得する
<?php $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); echo count($array); //=> 10 と表示される ?>4 asort, arsort : 配列をソート(並び替え)する
<?php $array = array(2, 5, 9, 7, 3, 1, 8, 6, 4); // 配列を昇順(小さい順)にソートする asort($array); // print_rで表示する print_r($array); //=> Array //=> ( //=> [5] => 1 //=> [0] => 2 //=> [4] => 3 //=> [8] => 4 //=> [1] => 5 //=> [7] => 6 //=> [3] => 7 //=> [6] => 8 //=> [2] => 9 //=> ) //=> と表示される。 // $array を降順(大きい順)にソートする arsort($array); // print_rで表示する print_r($array); //=> Array //=> ( //=> [2] => 9 //=> [6] => 8 //=> [3] => 7 //=> [7] => 6 //=> [1] => 5 //=> [8] => 4 //=> [4] => 3 //=> [0] => 2 //=> [5] => 1 //=> ) //=> と表示される ?>5 strip_tags : 文字列から HTML および PHP タグを取り除く
<?php // $strに<h1>と<p>を定義する $str = "<h1>strip_tags関数</h1>" . "<p>タグ取り除きます。</p>"; echo strip_tags($str) . "\n"; // strip_tags関数タグ取り除きます。と表示される ?> <!-- 取り除かないタグを指定してみる--> <?php $str = <<<EOM <h1>strip_tags関数</h1> <p>タグを取り除きます。</p> EOM; var_dump(strip_tags($str, "<p>")); // string(54) "strip_tags関数<p>タグを取り除きます。</p>"と表示される ?>6-1 array_push:1つ以上の要素を配列の最後に追加
<?php $fruits = ['apple', 'orange', 'melon']; // <!-- array_pushを使用して要素を追加する --> array_push($fruits, "banana", "pineapple"); // print_rで$fruitsを表示させる print_r($fruits); // 以下のように表示される // Array // ( // [0] => apple // [1] => orange // [2] => melon // [3] => banana // [4] => pineapple // ) ?>6−2 array_push関数で連想配列に値を追加する
キーと値がペアで設定されている多次元配列や連想配列では、array_push関数を使用して要素を追加しようとしても、配列に値を追加してくれません。
要素を追加しても、配列$fruitsには値は追加されません。
多次元配列や連想配列に要素を追加する方法はいくつかありますが、
array_push関数を使用する場合は、配列をキーと値の1次元配列に分離する必要があります。
値とキーの配列にそれぞれ要素を追加したあとに配列を結合して多次元配列を作成します。
以下に連想配列をarray_push関数を使用して、値を追加する方法を記述します。<?php $fruits = [0 => 'apple', 1 => 'orange', 2 => 'pineapple']; //連想配列をキーと値1次元配列に分解する foreach ($fruits as $key => $value) { $fruits_key[] = $key; $fruits_val[] = $value; } //キーと値の配列それぞれに値を追加する array_push($fruits_key, 3, 4); array_push($fruits_val, 'banana', 'pineapple'); //array_combineでキーと値の配列をマージする $fruits = array_combine($fruits_key, $fruits_val); print_r($fruits); ?>7 array_merge : 配列を結合する
<?php //配列を作成 $array1 = [1, 2, 3]; $array2 = [10, 20, 30]; $array3 = [100, 200, 300]; //配列を結合する $array = array_merge($array1, $array2, $array3); print_r($array); // 実行結果 // Array // ( // [0] => 1 // [1] => 2 // [2] => 3 // [3] => 10 // [4] => 20 // [5] => 30 // [6] => 100 // [7] => 200 // [8] => 300 // ) ?> <!-- 文字列配列の場合 --> <?php //配列を作成 $fruits1 = ['apple', 'orange', 'melon', 'banana', 'pineapple']; $fruits2 = ['strawberry', 'cherry', 'watermelon']; $fruits3 = ['anzu', 'papaya']; //配列を結合する $fruits_merge = array_merge($fruits1, $fruits2, $fruits3); print_r($fruits_merge); // 実効結果 // Array // ( // [0] => apple // [1] => orange // [2] => melon // [3] => banana // [4] => pineapple // [5] => strawberry // [6] => cherry // [7] => watermelon // [8] => anzu // [9] => papaya // ) ?>8 time, mktime:UNIXタイムスタンプの取得と日時の操作
<?php <!-- 現在のタイムスタンプを取得 --> echo `現在のUnixタイムスタンプ`.time(); echo '\n'; <!-- 三日後のタイムスタンプを取得 --> $nweek = time() + (3 * 24 * 60 * 60 ); echo "三日後のUnixタイムスタンプ:".$nweek; // 実行結果 現在のUnixタイムスタンプ:1505454884 3日後のUnixタイムスタンプ:1505714084 ?>time関数で取得した値はint型であるため、以下のように日時を比較するときに便利。
<?php //現在のタイムスタンプを取得 $time1 = time(); //3日後のタイムスタンプを取得 $time2 = time() + (3 * 24 * 60 * 60); if($time1 < $time2){ echo '$time2が大きい値です'; } // 実行結果 $time2が大きい値です ?>時刻の比較は、一定の日付までのデータを取得したり、時刻によって処理を分岐するときによく使用される。
time関数と同じく、UNIXタイムスタンプを取得する関数としてmktime関数がある
time関数との違いとしては、time関数は現在時刻のUNIXタイムスタンプを取得することができるのに対し、
mktime関数は指定した日時のUNIXタイムスタンプを取得することができるという点が挙げられる。<?php //指定した日時のタイムスタンプを取得 $timestamp = mktime(0, 0, 0, 8, 1, 2017); echo $timestamp; // 実行結果 1501545600 ?>しかし、実際はUXIXタイムスタンプがwebサービスで表示されている所はみたことがないと思います。
time関数やmktime関数で取得したUNIXタイムスタンプは、
次に紹介するdate関数を使用することにより指定したフォーマットで日時として取得することができます9 date:任意の形式でフォーマットし、日付文字列を返す
<?php //現在の日時を取得 echo date('Y/m/d', time()); echo '<br>'; //3日後のタイムスタンプを取得 $nweek = time() + (7 * 21 * 60 * 60); //3日後の日時を取得 echo date('Y/m/d', $nweek); // 実行結果 2017/09/15 2017/09/21 ?>まとめ
以上で主に使用される関数紹介を終了いたします。
私もまだまだ勉強が必要なので、これから自分がエンジニアになるため必要だぁなと思ったことは、
Qiitaにどんどん乗っけていきたいと思います!
それでは!
- 投稿日:2020-07-11T15:55:23+09:00
【Laravel】Viewに値を渡す方法は結局どれが良いのか
個人的な結論
配列に突っ込んでまとめて渡す
値を渡す方法
①withで渡す
HogeController.phppublic function test() { $hoge = "hoge"; return view("index")->with("hoge", $hoge); }ひとつならまあいいでしょう。
HogeController.phppublic function test2() { $hoge = "hoge"; $fuga = "fuga"; $piyo = "piyo"; return view("index") ->with("hoge", $hoge) ->with("fuga", $fuga) ->with("piyo", $piyo); }もしくは
HogeController.phppublic function test2() { return view("index")->with([ "hoge" => "hoge", "fuga" => "fuga", "piyo" => "piyo", ]); }問題点
複数は見づらいし冗長になって面倒くさい。
配列でまとめるなら後述する方法の方がスッキリする。②compactで渡す
HogeController.phppublic function test() { $hoge = "hoge"; return view("index", compact("hoge")); }HogeController.phppublic function test2() { $hoge = "hoge"; $fuga = "fuga"; $piyo = "piyo"; return view("index", compact("hoge", "fuga", "piyo")); }良い点
さっきよりだいぶすっきりした。スマートな感じがする。
キーと値の両方を書く必要がない分、記述が減る。問題点
viewで展開することを考えた変数宣言が必要。
(実際には同じ名前にすることが多いし、そろってた方が綺麗なので一概に悪いとも言えない。)PHP7.3でcompact()の仕様が変わったので、
変数がない文字列を引数に与えるとエラーになるため注意が必要。
https://www.php.net/manual/ja/function.compact.phpHogeController.phppublic function test2() { $hoge = "hoge"; $fuga = "fuga"; return view("index", compact("hoge", "fuga", "piyo")); // piyoがないのでエラーになる }③配列で渡す
HogeController.phppublic function test() { $data["hoge"] = "hoge"; return view("index", $data); }HogeController.phppublic function test2() { $data = [ "hoge" => "hoge", "fuga" => "fuga", "piyo" => "piyo", ]; return view("index", $data); }良い点
viewに渡している値がパッと見で分かりやすい。
return view()が常に同じ形になるため、統一感が出る。
view()の後ろがごちゃごちゃするのが個人的に好きじゃない。問題点
問題というか、なんとなくスマートな感じはしない。
まとめ
個人的には
③ → ② → ①
の順に書きやすいし、分かりやすいです。ちなみに
僕が未経験エンジニアとして入った会社で見たコードが、HogeController.phppublic function test2() { $test = "test"; $data["hoge"] = "hoge"; $data["fuga"] = "fuga"; $data["piyo"] = "piyo"; return view("index", $data) ->with("test", $test); }みたいな感じでした。(特に意図があったわけではないらしい)
違和感を感じるまで少しかかってしまった。
さすがにこれはないと思い、忘備録として残した次第です。結局主観も入っているので正解はないですが、
プロジェクトとして統一されていればどの書き方でも問題ないかなと。
- 投稿日:2020-07-11T14:33:40+09:00
icu4c がバージョンアップしたせいでphpが動作しなくなったときの解決策
背景
php artisan list
など php のコマンドが実行できなくなった。
php -v
すら動作しない。$ php -v dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.66.dylib Reason: image not found調査
かるく調べてみたところ、
brew yarn install
(あまり自信がないがたぶんこれが原因)により、icu4c
がバージョンアップされてしまい、依存関係が崩れてしまったためのようだ。$ brew info icu4c icu4c: stable 67.1 (bottled) [keg-only]どうやら、エラーから察するにこれをv66系にダウングレードする必要がありそう。
ちなみに、phpは
phpenv
でコントロールしていて、php7.2.24
で稼働しているのだが、新しめのバージョン(php7.3.11)
の場合は依存関係がクリアであるため問題なく動作する。$ php -v PHP 7.3.11 (cli) (built: Feb 29 2020 02:50:36) ( NTS )解決策
で、過去のバージョンに切り替えるのだが、過去のバージョンがCellerに残っているとき以下に各バージョンが出てくる。
$ brew info icu4c icu4c: stable 67.1 (bottled) [keg-only] C/C++ and Java libraries for Unicode and globalization http://site.icu-project.org/home /usr/local/Cellar/icu4c/67.1 (258 files, 71.2MB) Poured from bottle on 2020-07-08 at 12:10:46 (ここにずらっとバージョンがならぶ) From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/icu4c.rbその場合、
brew switch icu4c 66.1
みたいな感じで切り替えが可能だが今回はないので、過去コミットから取得してくる必要がある// Formula へ移動 cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula // コミットを確認ん $ git log --oneline icu4c.rb 88b9cc7898 icu4c: update 67.1 bottle. e7d9d76421 icu4c 67.1 22fb699a41 icu4c: update 66.1 bottle. <-ここに戻したい c78114de12 icu4c 66.1 a806a621ed icu4c: update homepage and url (#44812) 896d1018c7 icu4c: update 64.2 bottle. // 戻したいバージョンにアップデート // これで古いバージョンをインストールする状態になった $ git checkout 22fb699a41 icu4c.rb Updated 1 path from f3a60216be // reinstall $ brew reinstall icu4c // バージョンの再確認 $ brew info icu4c icu4c: stable 66.1 (bottled) [keg-only]ダウングレードができたので、もう一度
php -v
を試してみます。$ php -v (git)-[feature/add_official_account_report] PHP 7.2.24 (cli) (built: May 3 2020 10:40:39) ( NTS )無事動きましたとさ
参考文献
- brewの用語やコマンドはこちら Homebrew使い方まとめ
- brewのダウングレードはこちら Homebrewで過去バージョンにダウングレードする2つの方法
- 投稿日:2020-07-11T14:33:40+09:00
icu4c がバージョンアップされたせいでphpが動作しなくなったときの解決策
背景
php artisan list
など php のコマンドが実行できなくなった。
php -v
すら動作しない。$ php -v dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.66.dylib Reason: image not found調査
かるく調べてみたところ、
brew yarn install
(あまり自信がないがたぶんこれが原因)により、icu4c
がバージョンアップされてしまい、依存関係が崩れてしまったためのようだ。$ brew info icu4c icu4c: stable 67.1 (bottled) [keg-only]どうやら、エラーから察するにこれをv66系にダウングレードする必要がありそう。
ちなみに、phpは
phpenv
でコントロールしていて、php7.2.24
で稼働しているのだが、新しめのバージョン(php7.3.11)
の場合は依存関係がクリアであるため問題なく動作する。$ php -v PHP 7.3.11 (cli) (built: Feb 29 2020 02:50:36) ( NTS )(今回はphpとの依存関係で発生しているが、他のものとの依存関係は発生すると思うので、どちらかをアップグレード、またはダウングレードして合わせる必要がある。今回はダウングレードを選択した。)
解決策
で、過去のバージョンに切り替えるのだが、過去のバージョンがCellerに残っているとき以下に各バージョンが出てくる。
$ brew info icu4c icu4c: stable 67.1 (bottled) [keg-only] C/C++ and Java libraries for Unicode and globalization http://site.icu-project.org/home /usr/local/Cellar/icu4c/67.1 (258 files, 71.2MB) Poured from bottle on 2020-07-08 at 12:10:46 (ここにずらっとバージョンがならぶ) From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/icu4c.rbその場合、
brew switch icu4c 66.1
みたいな感じで切り替えが可能だが今回はないので、過去コミットから取得してくる必要がある// Formula へ移動 cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula // コミットを確認ん $ git log --oneline icu4c.rb 88b9cc7898 icu4c: update 67.1 bottle. e7d9d76421 icu4c 67.1 22fb699a41 icu4c: update 66.1 bottle. <-ここに戻したい c78114de12 icu4c 66.1 a806a621ed icu4c: update homepage and url (#44812) 896d1018c7 icu4c: update 64.2 bottle. // 戻したいバージョンにアップデート // これで古いバージョンをインストールする状態になった $ git checkout 22fb699a41 icu4c.rb Updated 1 path from f3a60216be // reinstall $ brew reinstall icu4c // バージョンの再確認 $ brew info icu4c icu4c: stable 66.1 (bottled) [keg-only]ダウングレードができたので、もう一度
php -v
を試してみます。$ php -v (git)-[feature/add_official_account_report] PHP 7.2.24 (cli) (built: May 3 2020 10:40:39) ( NTS )無事動きましたとさ
参考文献
- brewの用語やコマンドはこちら Homebrew使い方まとめ
- brewのダウングレードはこちら Homebrewで過去バージョンにダウングレードする2つの方法
- 投稿日:2020-07-11T14:00:47+09:00
一つ目のサービスを作ってから、感じたこと/サービスを作りなおした話
1カ月前に「みんなでコードレビュー」というサービスを作りました~~
■参考記事
https://qiita.com/shibaHaya/items/734d5e2cd22f7e7d9576このサービスは、自分のコードをレビューしてもらったり、軽い感じでレビューするサービスを想定して作ってみたものでした
経過
Qiitaに記事を書いて、「LGTM」をたくさんもらえて、それなりの流入がありました。
しかし、日がたつにつれサイトの訪問者はどんどん減っていきました原因
・サービス開始時に、それほど質問の量がないので、見に来る人も少なくなる(なので期間がかかる)
・そもそもこのサービスに人がいないので、コードを載せても答えが返ってこない、使わない
・コードレビューなら、普通Githubなどを使うし、軽い感じでコードレビューしてもらいたいって人があまりいないので、需要がない
・見た目が使いにくい
・そもそも知られてないまあ、主な点はこんな感じだろう??と思う。。
少し対策してみる
なにか苦し紛れな感じで、追加機能をつけてみた。
・通知機能
・アイコン入力機能
・Best Answer
・そもそも機能を改修し、自分のコードを自分でレビューするようなサービスにしてみたりした。その時の気持ち
少し使いやすさは改善したように思うが、なんかやっていて意味があるのかな~?
そもそも、「自分このサービス使わないしな~」とか思ってた。だいぶモチベーションが下がっていたとき、「Google Adsense」の合格メールが来た
「まあ、広告はっといたら、1円ぐらいは、かせげるのかな~」と思い、機能開発はストップしていたが、広告だけ貼ってみた。すると、次の日に「100円」の収益がついていた。
「え、100円も稼げるの?」ってだいぶモチベーションが上がった自分が感じたこと
自分は最初、作るのは楽しいし、とりあえず作って、人が集まったら、広告でも貼って、ちょっとは収益になるかな~と思っていた
実際作ったまでは、楽しかったが、それ以降の「機能追加・改修」はあんまりモチベーションが続かなかった。
そもそも僕は、月6万ぐらいかせげたら、田舎のおじいちゃん・おばあちゃんの家で暮らして、そこで開発したいな~と思っている。
僕にとっては収益が重要ぽいので、100円稼げたときは、自分が想像するよりもモチベーションが上がった。結果、自分の性格的に、サービス開発を続ける / このサービス継続して長く公開しとこうと思えるモチベーション優先順位は、
- 収益
- サービスの新規開発の楽しさ
- 収益がない場合でも、自分が使えるもので、あまり大きな改修や追加機能の手間がないもの (これはサービスの目的をしっかり決めてたら達成できそう)
こんな感じだと思う。 多分
収益があれば、機能改修のモチベーションも湧くが、今の「みんなでコードレビュー」は、自分も使わない(3番も未達成)し、人が全然いないので、1番も達成できなそう。2番はもう使い終わったし。。
1番は、ハードルが高いので、とりあえず3番を達成できそうなサービスに作り替える
自分が開発するときのメモを、webで保存できて後から見直せるサービスに作り替える。
自分が使うサービスを作ろうと思ったので、これにした。
機能的には、「みんなでコードレビュー」で実装したものを削っていけばできるから、簡単だった。
・自分のメモを残せるようにする
・ログイン
・お気に入り/いいね
・メモをちょっとカラフルに(codeなんかものせられる)
・マイページでも、見た目がダサいので、これだと自分もつかわなくなるかもと思ったので、見た目を改善する
デザインテンプレートを参考に使ってみる
自分のデザイン力は、絶望的なので、これを利用すれば手っ取り早くかっこよくなる。
調べると、ほんとうにいっぱいあってありがたい。今回参考にしたサイトは、「https://template-party.com/」
利用規約を読むと、
テンプレート下部に入っているWeb Design:Template-Party(もしくは「Produced by Girl Staff」か「Web Design:Template-Party&> Girl-Staff」等の表記である場合あり)の文字とリンクは外さずにご利用下さい。その他は自由にカスタマイズして頂いて構いません
だったので、必要な機能だけ残してカスタマイズさせてもらった。
見た目はこんな感じ前よりめちゃいい。つぎからこういったサイトを作るときはテンプレートを利用しよ!
サイト内の色を決める
僕はとりあえず、オレンジをメインにてきとうに決めていたが、すごく見えづらかった。
調べてみると、世の中には配色デザインを提供してくれるサービスがあるらしい。そんな中で今回利用したのが、「PALETTABLE」
何百万人のデザイナーの配色知識を詰めこんだツールで、組み合わせも考えられた色を、好きか嫌いを選ぶだけで直感的に探し出してくれる。
このサービスを使って、5色決めたことにより、見た目がきれいになった。
回収したサイト
これなら、自分も使いそう
まとめ
今回のことで、自分が何にモチベーションをもっているのか少しわかった。
このサービスは、完了したので、次のサービスを作りたい今度は、ドメイン名以外すべて無料で開発しようと思う。
記事を読んでくれて、ありがとうございました
- 投稿日:2020-07-11T13:37:07+09:00
30代未経験者の地方(愛知)へのエンジニア転職奮闘記始めます
はじめまして!
33歳のプログラミング未経験者である私が、地元の愛知県に転職活動をしている記録を残していきたいと思います。学んでいる言語はもちろん、転職活動をしていて感じたことを書きたいなと思います。アラサーとなった今、人口が減って経済が縮小していく日本で、どのようなキャリアを造っていくのか悩むことが多くなってきました。そして周りにも同じ悩みをもつ同世代の友人は多いです。
自分の記録が、キャリア形成について悩んでいる方々に少しでもお役に立てばいいなと思います。自己紹介
私は、愛知県生まれ、仕事の関係で静岡県に住み一般企業(安定的企業)で事務職に就いています。
専門学校卒で特段目立ったスキルもなく、凡人サラリーマンです。なぜ転職をしようと考えたのか
私の就いている会社は比較的安定的な企業で、周りの人にも「その会社なら、一生安泰だわ」と言われるような会社です。
ただ内部で仕事をしていると悩むことも多いのです。
例えば
基本的に仕事はルーティーン業務。過去の記録をコピペするような業務です。
言われたことをミスなく黙ってやっていればいいのです。
日々、これは自分がやらなくてもいいんじゃないかな??と感じたり最近ではRPAという自動化システムが導入され始めて、さらに自身の存在価値が疑われるような状況になってきました。なぜエンジニアに転職しようと考えたのか?
基本的に以下の3点です。
・手に職を付けたかったから
・ITがこれからも伸びていく産業だと思うから
・人々の生活を便利にして豊かにすることが出来ると考えたから今回は初投稿なのでここまでとして、次回以降、なぜエンジニアになりたいかさらに掘り下げていきたいと思います!
次回は「凡人サラリーマン転職フェアに行く」をテーマに投稿したいと思います。
よかったら見てください
- 投稿日:2020-07-11T13:37:07+09:00
30代未経験者の地方(愛知)へのエンジニア転職奮闘記
33歳のプログラミング未経験者である私が、地元の愛知県に転職活動をしている記録を残していきたいと思います。学んでいる言語はもちろん、転職活動をしていて感じたことを書きたいなと思います。
20代から現在にかけて、人口が減って経済が縮小していく日本で、どのようなキャリアを造っていくのか悩むことはとても多いです。そして周りにも同じ悩みをもつ同世代の友人は多いです。
自分の記録が、キャリア形成について、少しでもお役に立てばいいなと思います。自己紹介
私は、愛知県生まれ、仕事の関係で静岡県に住み一般企業(安定的企業)で事務職に就いています。
専門学校卒で特段目立ったスキルもなく、凡人サラリーマンです。なぜ転職をしようと考えたのか
私の就いている会社は比較的安定的な企業で、周りの人にも「その会社なら、一生安泰だわ」と言われるような会社です。
ただ内部で仕事をしていると悩むことも多いのです。
例えば
基本的に仕事はルーティーン業務。過去の記録をコピペするような業務です。
言われたことをミスなく黙ってやっていればいいのです。
日々、これは自分がやらなくてもいいんじゃないかな??と感じたり最近ではRPAという自動化システムが導入され始めて、さらに自身の存在価値が疑われるような状況になってきました。なぜエンジニアに転職しようと考えたのか?
基本的に以下の3点です。
・手に職を付けたかったから
・ITがこれからも伸びていく産業だと思うから
・人々の生活を便利にして豊かにすることが出来ると考えたから次回は「凡人サラリーマン転職フェアに行く」をテーマに投稿したいと思います。
よかったら見てください
- 投稿日:2020-07-11T13:17:50+09:00
PHPで身長を比較する関数を作る
returnの返り値をこれでやっと理解できた!
<?php function tall($X, $x, $Y, $y) { if ($x > $y) { return $X; } else if ($x < $y) { return $Y; } else { return 'どっちも一緒'; } } function answer($name) { if ($name === 'どっちも一緒'){ echo 'どっちも一緒'; } else { echo $name . 'の方が大きい'; } } $A = '河合俊一'; $B = 'ボブサップ'; $a = 195; $b = 196; $tall = tall($A, $a, $B, $b); answer($tall); ?>実行結果は
ボブサップの方が大きいコード汚なかったり、
もうちょっといい書き方あるかもちなみに関数側の引数は仮引数で何を入れてもいいんだけど
実引数の変数名に合わせた方がいいのか、
関数側の値に合わせた変数を命名した方がいいのか...どっちだろうか...
- 投稿日:2020-07-11T12:16:56+09:00
【超初心者用】MacでApacheのドキュメントルートを確認する方法(Apacheの設定ファイルを探すというミッション)
「ドキュメントルートってどこだっけ?」となることが多い。確認方法だけわかっていたらいちいち覚えていなくてもいいし、変更することがあれば確認方法を知らないと困ることになるので、メモしておきます。
ターミナルから確認するためのコマンド
ターミナルの起動を起動して次を入力すると出てきた!
$ cd /etc/apache2 $ ls extra magic original users httpd.conf mime.types other左下に発見しました。
httpd.confのディレクトリ
/etc/apache2/
の中にあることがわかりました。
apache2の2はなんなんだろうと思ってしまいます。ターミネーター2の2とは意味が違うんでしょうけど。とりあえずapache
ではなくapache2
にあるということが注意点ですな。httpd.confを開く
$ sudo vi httpd.confで開きます。
viの操作も全然なれていませんが、頑張って探します。
DocumentRootの記述を探す
コマンドラインに
/Document
を入力すれば検索もできます。探すだけならこれでいいですね。254 DocumentRoot "/Library/WebServer/Documents" 255 <Directory "/Library/WebServer/Documents">ApacheはMacに標準で入っていたものを使っています。
こういう設定ファイル系がソフトごとにあるけど、結局どこにあるかわからなくなってしまう。これってエンジニアの方は覚えてるんですかね?メモってるんですかね?管理用のなんかがあるんですかね?どうなんでしょう?
参考にしたサイト
- 投稿日:2020-07-11T11:35:09+09:00
Laravel アプリケーションファイルを$ git clone 後に実施することメモ
目的
- LaravelアプリをGitHubからcloneした後に実施しないといけないことを毎回忘れるので自分用にまとめる
実施環境
- ハードウェア環境
項目 情報 OS macOS Catalina(10.15.5) ハードウェア MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) プロセッサ 2 GHz クアッドコアIntel Core i5 メモリ 32 GB 3733 MHz LPDDR4 グラフィックス Intel Iris Plus Graphics 1536 MB
- ソフトウェア環境
項目 情報 備考 PHP バージョン 7.4.3 Homwbrewを用いて導入 Laravel バージョン 7.0.8 commposerを用いてこちらの方法で導入→Mac Laravelの環境構築を行う MySQLバージョン 8.0.19 for osx10.13 on x86_64 Homwbrewを用いてこちらの方法で導入→Mac HomebrewでMySQLをインストールする することその1 DBの作成
下記コマンドを実行してMySQLにログインする。(MySQLのrootユーザのパスワードを忘れてしまった方はこちら→Mac ローカル環境の MySQL 8.0 のrootパスワードを忘れた時のリセット方法)
$ mysql -u root -p下記を実行してDBを作成する。
create database 作成するDB名することその2 .envファイルの用意
- cloneしてきたディレクトリで.envファイルの作成をする。
cloneしてきた環境の用の.envファイルがGit管理されていない場合は下記のコマンドを実行して.envファイルの例になるファイルから作成する。
terminal
`
cp .env.example .env
1. .envファイル作成後はcloneした環境に合った設定を記載する。(MySQLのユーザ名やパスワード、DB名など)することその3 composer install
cloneしてきたディレクトリで下記コマンドを実行してcomposer installを実行する。
$ composer installすることその4 アプリキーの作成
cloneしてきたディレクトリで下記コマンドを実行してアプリキーの作成を行う。
$ php artisan key:generate
- 投稿日:2020-07-11T10:48:39+09:00
【Laravel】usersテーブルにカラムを追加する
内容
はじめにマイグレーションを行うと、usersテーブルにnameとemailなどができるが、プロフィールを作成しようとすると、性別や年齢、自己紹介文などが欲しくなります。
そこで、既存のusersテーブルにカラムを追加する作業を行います。前提
laravel7で行います。
すでにマイグレーションを行っているものとします。% php artisan migrate方法
- マイグレーションファイルを作成
- カラムを追加
- マイグレーション
マイグレーションファイルの作成
% php artisan make:migration add_column_to_users_table --table=usersどういう操作をするかわかりやすいファイル名にすると良いでしょう。
--tableオプションでどのテーブルを編集するか指定します。カラムを追加
20XX_00_00_000000_add_column_to_users_table.phpclass AddColumnToUsersTable extends Migration { public function up() { Schema::table('users', function (Blueprint $table) { $table->string('body')->nullable(); }); } public function down() { Schema::table('users', function (Blueprint $table) { $table->dropColumn('body'); }); } }up()に追加処理を書き、down()にロールバック処理を書きます。
マイグレーション
% php artisan migrateおわり
これでおわりです。
テーブルをいじるときは新しくマイグレーションファイルを作成するようにしましょう。
そうしないと、ロールバックする時正しく動作しなかったり、テーブルが崩れたりします。
- 投稿日:2020-07-11T10:47:49+09:00
Mac+DockerでphpStormを使いWordPressテーマを一から作る(1/3)
先日、2009年から愛用していた懐かしの白いMacBook(Early 2009)を卒業して、MacBook Air2020(1,1GHz i5クアッドコア+SSD 512GB+16GB RAM)に乗り換えました。
先代はメモリを8GBまで増設して内臓HDDもSSDに換装してなんとか延命をしており、普段使用するアプリケーション(Photoshop CCの最新版とかphpStormとかableton Liveとか)はほぼストレス無く使えていました。
現在はうつ病の療養中で無職のためこれまでやってきてなかった事をしたいと思い、今更ながらSassなどこれまで業務の中で触れなかった技術を学ぼうと思い、まずはVirtualBox+CentOSで環境を作ってみたのですが、公式リポジトリのCentOSのバージョンが7系でphpも5.4系とかなり古いものでした。
そこでDockerを使ってみようとしたところ、旧マシンではOSのアップデートがSierra(10.12)で止まってしまっており現行バージョンのDocker Desktopが使えなかったので、例の一人10万円給付金を使ったMacBook Air2020の購入へと至りました。
...と前置きが長くなりましたが本題に入りたいと思います。
本稿は長くなるので3回に別けて投稿したいと思います。ゴール
Docker Desktop for Mac でWordpress環境を作り、スターターテーマのunderscores(_S)を使ったテーマ開発ができるようにする。
cssはSassを使い、phpStorm側でコンパイルが出来るようにする。
ついでにohoMyAdminも使えるようにする。前提条件
- MacOS Catalina(10.15) ※セットアップとデータ移行が済んだ状態
- phpStorm(2020.1)
ステップ
- XCodeのインストール(1/3)
- Homebrewのインストール(1/3)
- node(npm)+node-sassのインストール(1/3)
- Docker Desktop for Mac のインストール((2/3)
- Docker-composeによるコンテナの構築(2/3)
- underscores(_s)でのスターターテーマの作成とファイルの設置(3/3)
- phpStormでのSassウォッチャーの登録(3/3)
Xcodeのインストール
まずはXCodeをインストールします。
これは後にHomebrew経由でnodeを導入し、さらにnode-sassを導入するための前準備です。インストールにはそこそこ時間が掛かるので、しばらく放っておきましょう。自分は1時間くらい掛かったような。
もしくはターミナルから以下のコマンドでもインストールできるようです。
$ xcode-select --installHomebrewのインストール
インストールが完了したら次はHomebrewのインストールを行います。
HomebrewをはMacOS向けのパッケージマネージャーで必要なものをコマンドで簡単にインストールできる、というものです。
これにより後のnodeのインストールを行います。公式サイトによれば以下のコマンドでインストールが可能なようです。
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"インストールが完了したらバージョンを確認し、以下のようにバージョンが表示されればOKです。
$ brew --version Homebrew 2.4.3 Homebrew/homebrew-core (git revision 06581; last commit 2020-07-07)node(npm)+node-sassのインストール
続いてHomebrew経由でnode(npm)をインストールします。
npmとはnodeのパッケージ管理ツールの事です。$ brew install -g nodeインストールが済んだらバージョンが正常に表示されるか確認しましょう。
$ node -v v14.5.0無事、インストールできたようです。
npmのバージョンは以下のコマンドで確認できます。$ npm version { npm: '6.14.5', ares: '1.16.0', brotli: '1.0.7', cldr: '37.0', icu: '67.1', llhttp: '2.0.4', modules: '83', napi: '6', nghttp2: '1.41.0', node: '14.5.0', openssl: '1.1.1g', tz: '2019c', unicode: '13.0', uv: '1.38.0', v8: '8.3.110.9-node.23', zlib: '1.2.11' }私の環境では以上のような結果になりました。
npmのインストールが確認できたら、今度はnpmでnode-sassをインストールします。$ npm install --global --save-dev node-sass特にエラーらしきものが出ていなければOKでしょう。
以降は次のエントリーに続きます。
- 投稿日:2020-07-11T09:40:01+09:00
PHPで画面にエラー表示させる方法(デフォルト設定方法も説明)
サーバーを立ち上げてPHPファイルをブラウザで閲覧した時に、エラーが発生して
画面が真っ白になることありますよね。
コードのどの行でエラーが発生しているのかを突き止めるには、エラーメッセージを
画面に表示するように設定すると便利です。そのためには、主に以下の2つの方法があります。
①PHPファイルにコードを1行追加する方法
→ファイル毎に追加する必要があります②PHPの設定ファイルを変更する方法
→一度設定すると、①のように毎回コードを追加する必要がなくなります
それでは、それぞれの方法について説明させていただきます。
①PHPファイルにコードを1行追加する場合
こちらは至ってシンプルで、エラーを表示させていPHPファイルに
以下のコードを1行追加します。
これでエラーが表示されるようになります。<?php ini_set('display_errors', 'On' );しかし、ファイル毎にいちいち記載するのが面倒だ!という場合は、
PHPの設定を変更して常にエラーが表示されるようにすると楽です。②PHPの設定ファイルを変更する場合
こちらは、PHPの設定ファイルである php.ini を編集します。
(今回はMacPCを使用しています)
自分が今使用しているPHPのバージョンによって編集する設定ファイルが異なるので、
まずはPHPのバージョンを確認します。
ターミナル等で「php -v」コマンドを入力します。$ php -v PHP 7.4.2 (cli) (built: Feb 17 2020 12:56:02) ( NTS ) Copyright (c) The PHP Group私の場合、PHPのバージョンは7.4.2でした。
次に設定ファイル「php.ini」がどこにあるのかを調べるために、「php -i | grep php.ini」コマンドを入力します。
$ php -i | grep php.ini Configuration File (php.ini) Path => /Applications/MAMP/bin/php/php7.4.2/conf Loaded Configuration File => /Applications/MAMP/bin/php/php7.4.2/conf/php.ini私の環境の場合、一番下の行にあるように、
/Applications/MAMP/bin/php/php7.4.2/conf/php.ini が、php.ini のパスになります。
こちらの部分は皆さんの環境によって異なると思うので、コマンドの出力結果をご確認ください。それでは、先ほど確認したパスを辿って php.iniを編集していきます。
念のため、ファイルをコピーしてバックアップを残しておくと安心です。ファイルをエディターで開いたら、command + F で検索モードにして、
「display_errors」 で検索してください。
この時、display_errors = Off となっている行がありましたら、
こちらをdisplay_errors = On に変更します。これで設定は完了です!
XAMPPやMAMPを起動している場合は、Apacheを再起動すれば
自動で画面にエラーが表示されるようになります。
- 投稿日:2020-07-11T09:40:01+09:00
【PHP】画面にエラー表示させる方法(デフォルト設定方法も説明)
MAMP等を立ち上げてPHPファイルをブラウザで閲覧した時に、エラーが発生して
画面が真っ白になることありますよね。
そんな時は、コードのどの行でエラーが発生しているのかを突き止められるよう
エラーメッセージを画面に表示するように設定すると便利です。そのためには、主に以下の2つの方法があります。
①PHPファイルにコードを1行追加する方法
→ファイル毎に追加する必要があります②PHPの設定ファイルを変更する方法
→一度設定すると、①のように毎回コードを追加する必要がなくなります
それでは、それぞれの方法について説明させていただきます。
①PHPファイルにコードを1行追加する場合
こちらは至ってシンプルで、エラーを表示させたいPHPファイルに
以下のコードを1行追加します。
これでエラーが表示されるようになります。<?php ini_set('display_errors', 'On' );しかし、ファイル毎にいちいち記載するのが面倒だ!という場合は、
PHPの設定を変更して常にエラーが表示されるようにすると楽です。②PHPの設定ファイルを変更する場合
こちらは、PHPの設定ファイルである php.ini を編集します。
(今回はMacPCを使用しています)
現在使用しているPHPのバージョンによって編集する設定ファイルが異なるので、
まずはPHPのバージョンを確認します。
ターミナル等で「php -v」コマンドを入力します。$ php -v PHP 7.4.2 (cli) (built: Feb 17 2020 12:56:02) ( NTS ) Copyright (c) The PHP Group私の場合、PHPのバージョンは7.4.2でした。
次に設定ファイル「php.ini」がどこにあるのかを調べるために、「php -i | grep php.ini」コマンドを入力します。
$ php -i | grep php.ini Configuration File (php.ini) Path => /Applications/MAMP/bin/php/php7.4.2/conf Loaded Configuration File => /Applications/MAMP/bin/php/php7.4.2/conf/php.ini私の環境の場合、一番下の行にあるように、
/Applications/MAMP/bin/php/php7.4.2/conf/php.ini が、php.ini のパスになります。
こちらの部分は皆さんの環境によって異なると思うので、コマンドの出力結果をご確認ください。それでは、先ほど確認したパスを辿って php.iniを編集していきます。
念のため、ファイルをコピーしてバックアップを残しておくと安心です。php.iniをエディターで開いたら、command + F で検索モードにして、
「display_errors」 で検索してください。
この時、display_errors = Off となっている行がありましたら、
こちらをdisplay_errors = On に変更します。これで設定は完了です!
XAMPPやMAMPを起動している場合は、Apacheを再起動すれば
自動で画面にエラーが表示されるようになります。
- 投稿日:2020-07-11T02:18:47+09:00
超初心者がherokuにPHPアプリを公開してみた!~デプロイ編~
前回投稿したアカウント登録編の続きです。
実際にアプリケーションをherokuにデプロイ(上げる)してみたので、手順をまとめました。デプロイしたもの
言語:PHP
FW:Laravel6.0
DB:MySQL
エディタ:Visual Studio Codeアプリケーションの作成
herokuにデプロイするアプリケーションを作成します。
アプリケーション名は前回登録したものと同じものにします。herokuにログイン
続いて、ターミナルからherokuにログインします。
$heroku loginすると、以下のようなコマンドが表れるので、「q」以外のキーボードをどれか適当に押します。
heroku: Press any key to open up the browser to login or q to exit:ブラウザにこのような画面が表れるので、「Log In」を押す。
無事herokuにログインができました!
ログインが完了したら閉じても大丈夫です。
herokuにアプリケーションを上げる
ログインが完了したら、作成したアプリケーションをherokuに上げてみましょう!
herokuのアプリケーションはGitを経由して上げられる為、gitコマンドを利用します。$git init Reinitialized existing Git repository in [アプリケーションが格納されているディレクトリ] $ heroku git:remote -a [アプリケーション名] set git remote heroku to https://git.heroku.com/アプリケーション名.git $git add . $git commit -m "任意のコメント" $git push heroku masterステージングする際は何かしらの変更を加えてから行うと、「add」以降の処理が行えます。
pushした後にわんさか処理のログが流れますが、「 * [new branch] master -> master」が最後に表れたらOKです。
実際にpushした後は、下図のようにダッシュボード画面のDeployバーにて、Githubと連携できたことが確認できます。
herokuにアプリケーションの設定
herokuに作ったアプリケーションにビルドパックを追加します。
ビルドパックとは、heroku上でアプリケーションを動かすために必要な機能やスクリプトを一式集めたもので、言語ごとに備わっています。
ビルドパックはアプリケーションをherokuにデプロイすると、アプリケーションに沿った言語のビルドパックが追加されます。
今回はPHPでアプリケーションを作った為、PHPのビルドパックが追加されています。
Procfileを作成する
アプリケーションが上げられたら、Procfileを作成しましょう。
Procfileとは、heroku上にあるアプリケーションをどうやって動かすのかを記載する、指示書のようなものです。
以下のコマンドをアプリケーションの直下ディレクトリで打ち込みます。$touch Procfileすると「Procfile」という名前の空のテキストファイルが作成される為、以下の表記を追記します。
Procfile.txtweb: vendor/bin/heroku-php-apache2 public/今回はwebサーバーにApacheを使用した為、こちらの表記を使用します。
Procfileの内容はアプリケーションに使用する言語によって異なります。varcharの文字数を191文字にする
Procfileを追加し、herokuへpush...の前に、データベースのvarchar型の191byteに変更します。
herokuの無料プランでは、通常の文字数である255byteだと規定のデータ量を超えてしまい、マイグレーションする際にエラーが発生してしまいます。(マイグレーションのロールバックやコミットの取消などを行う羽目になります。)
app>Providers直下にあるAppServiceProvider.phpを以下のように編集します。AppServiceProvider.php<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\Schema; //この記述を追加しないと「Schemaなんてクラスが無いぞ!と怒られます class AppServiceProvider extends ServiceProvider { /** * Register any application services. * * @return void */ public function register() { Schema::defaultStringLength(191); }改行コードをCRLFに変更しないようにする
今度こそpushを...と思ったら、そのままステージングしようとしたら、以下のようなエラーががが。
warning: LF will be replaced by CRLF in app/Providers/AppServiceProvider.php. The file will have its original line endings in your working directory調べると、Gitが改行コードをCRLF形式に変更しようとしているらしい。
これはGitの特性なのか設定によるものなのかは調査中ですが、こちらを防ぐ為に、ステージング前に以下のコマンドを入力します。$ git config --global core.autoCRLF falseherokuにpushする
これでようやくherokuにpushできます。
$git add -A $git commit -m "任意のコメント" $git push heroku masterClearDBの追加
MySQLを使用する際は、アドオンとしてClearDBというものを使います。
ClearDBとはDBaaSと呼ばれるアプリケーションで、バックアップやメンテナンスなどの管理作業はプラットフォームが行ってくれます。
以下のコマンドを入力して、ClearDBを追加します。$heroku addons:add cleardb #実行後 Creating cleardb on ⬢ laraheroku-test... free Created cleardb-pointy-89803 as CLEARDB_DATABASE_URL Use heroku addons:docs cleardb to view documentationURLの情報を確認
ClearDBのURLでこの後の環境変数の設定に必要な情報を確認します。
$ heroku config | grep CLEARDB_DATABASE_URLここで出力されるURLの見方は以下の通りです。
CLEARDB_DATABASE_URL: mysql://[ユーザー名]:[パスワード]@[ホスト名]/[データベース名]?reconnect=true
環境変数の設定
DBに接続するための環境変数をheroku configに設定します。
設定は先述のURLの情報をそれぞれの項目に設定します。$ heroku config:set DB_DATABASE=[データベース名] $ heroku config:set DB_HOST=[ホスト名] $ heroku config:set DB_USERNAME=[ユーザー名] $ heroku config:set DB_PASSWORD=[パスワード] $ heroku config:set APP_KEY=$(php artisan key:generate --show) $ heroku config:set APP_ENV=heroku $ heroku config:set LANG=ja_JP.UTF-8 #言語コードの設定 $ heroku config:set TZ=Asia/Tokyo #タイムゾーンの設定マイグレーションの実行
以上の設定をマイグレーションします。
$ heroku run php artisan migrateサイトを開く
マイグレーションが問題無くできましたら、いよいよサイトを開く時です!
以下のコマンドを入力すると、サイトが開きます。$ heroku openLaravelのWelcome画面を開くことに成功しました!!!!
ちなみに、herokuに上げられたサイトは「herokuapp」のドメインが与えられます。まとめ
紆余曲折しましたが、アプリケーションをherokuに上げてみました。
サーバーにアプリケーションを公開することはWebアプリ開発の大きな目標の一つとしていたので、小さいながらも出来たことに達成感を味わいました。
これを皮切りに他に作った物をherokuに上げてみたり、他のサーバーにも触れていきたいと思います。
今回上げたものは以下のURLになります。
laraheroku-test参考文献
Laravelをherokuにデプロイする(データベースはMySQL)
git addしたらCRLF will be replaced by LFなエラー
Herokuにデプロイ済みのMySQLのロールバック
- 投稿日:2020-07-11T01:17:16+09:00
PHPのアクセス修飾子
はじめに
PHPのアクセス修飾子の違いについて今更ながらちゃんと理解できました。
今までちゃんと考えないで使っていたので復習しました。PHPのアクセス修飾子について
まずはアクセス権が厳しい順にprivate→protected→publicとなっています。
・private
同じクラスの中でのみアクセス可能。
非公開で継承クラスからもアクセス不可能。・protected
そのクラス自身と継承クラスからアクセス可能。
非公開だがが、継承は可能。・public
どこからでもアクセス可能。
アクセス修飾子がない場合は、publicを指定したものと同じになる。まずprivateにできないか考えてそれば無理ならprotected→publicみたいな順に考えるのが良いでしょう。
publicを使えば動くは動くのですが、安定したサービスの運用のためには適切なものをつかうのが良いでしょう。おわりに
実装していく中で細かい部分に関してはいったんおいておいて大枠をとらえるようにしていましたが、これからは細かい要素も学んでいきたいと思います。
- 投稿日:2020-07-11T00:05:58+09:00
PHPの連想配列を使ってポケモン図鑑を作ってみた
連想配列を使って
ポケモンのタイプを検索できるようにしてみた。
<?php $pokeon = [ 'フシギダネ' => 'くさ', 'フシギソウ' => 'くさ', 'フシギバナ' => 'くさ', 'ヒトカゲ' => 'ほのお', 'リザード' => 'ほのお', 'リザードン' => 'ほのお', 'ゼニガメ' => 'みず', 'かメール' => 'みず', 'カメックス' => 'みず', 'キャタピー' => 'むし', 'トランセル' => 'むし', 'バタフリー' => 'むし', 'ビードル' => 'むし', 'コクーン' => 'むし', 'スピアー' => 'むし', 'ポッポ' => 'とり', 'ピジョン' => 'とり', 'ピジョット' => 'とり', 'コラッタ' => 'ノーマル', 'ラッタ' => 'ノーマル', 'オニスズメ' => 'とり', 'オニドリル' => 'とり', 'アーボ' => 'どく', 'アーボック' => 'どく', 'ピカチュウ' => 'でんき', 'ライチュウ' => 'でんき', 'サンド' => 'じめん', 'サンドパン' => 'じめん', 'ニドラン♂' => 'ノーマル', 'ニドリーノ' => 'ノーマル', 'ニドキング' => 'ノーマル', 'ニドラン♀' => 'ノーマル', 'ニドリーナ' => 'ノーマル', 'ニドクイン' => 'ノーマル', 'ピッピ' => 'ノーマル', 'ピクシー' => 'ノーマル', 'ロコン' => 'ほのお', 'キュウコン' => 'ほのお', 'プリン' => 'ノーマル', 'プクリン' => 'ノーマル', 'ズバット' => 'あく', 'ゴルバット' => 'あく', 'ナゾノクサ' => 'くさ', 'クサイハナ' => 'くさ', 'ラフレシア' => 'くさ', 'パラス' => 'くさ', 'パラセクト' => 'くさ', 'コンパン' => 'むし', 'モルフォン' => 'むし', 'ディグダ' => 'じめん', 'ダグトリオ' => 'じめん', 'ニャース' => 'ノーマル', 'ペルシアン' => 'ノーマル', 'コダック' => 'みず', 'ゴルダック' => 'みず', 'マンキー' => 'かくとう', 'オコリザル' => 'かくとう', 'ガーディ' => 'ほのお', 'ウインディ' => 'ほのお', 'ニョロモ' => 'みず', 'ニョロゾ' => 'みず', 'ニョロモン' => 'みず', 'ケーシィ' => 'エスパー', 'ユンゲラー' => 'エスパー', 'フーディン' => 'エスパー', 'ワンリキー' => 'かくとう', 'ゴーリキー' => 'かくとう', 'カイリキー' => 'かくとう', 'マダツボミ' => 'くさ', 'ウツドン' => 'くさ', 'ウツボット' => 'くさ', 'メノクラゲ' => 'みず', 'ドククラゲ' => 'みず', 'イシツブテ' => 'じめん', 'ゴローン' => 'じめん', 'ゴローニャ' => 'じめん', 'ポニータ' => 'ほのお', 'ギャロップ' => 'ほのお', 'ヤドン' => 'みず', 'ヤドラン' => 'みず', 'コイル' => 'でんき', 'レアコイル' => 'でんき', 'カモネギ' => 'とり', 'ドードー' => 'とり', 'ドードリオ' => 'とり', 'パウワウ' => 'みず、こおり', 'ジュゴン' => 'みず、こおり', 'ベトベター' => 'どく', 'ベトベトン' => 'どく', 'シェルダー' => '氷', 'パルシエン' => '氷', 'ゴース' => 'ゴースト', 'ゴースト' => 'ゴースト', 'ゲンガー' => 'ゴースト', 'イワーク' => 'いわ', 'スリープ' => 'エスパー', 'スリーパー' => 'エスパー', 'クラブ' => 'みず', 'キングラー' => 'みず', 'ビリリダマ' => 'でんき', 'マルマイン' => 'でんき', 'タマタマ' => 'くさ、エスパー', 'ナッシー' => 'くさ、エスパー', 'カラカラ' => 'じめん', 'ガラガラ' => 'じめん', 'サワムラー' => 'かくとう', 'エビワラー' => 'かくとう', 'ベロリンガ' => 'ノーマル', 'ドガース' => 'どく', 'マタドガス' => 'どく', 'サイホーン' => 'じめん', 'サイドン' => 'じめん', 'ラッキー' => 'ノーマル', 'モンジャラ' => 'くさ', 'ガルーラ' => 'ノーマル', 'タッツー' => 'みず', 'シードラ' => 'みず', 'トサキント' => 'みず', 'アズマオウ' => 'みず', 'ヒトデマン' => 'みず', 'スターミー' => 'みず', 'バリヤード' => 'エスパー', 'ストライク' => 'むし', 'ルージュラ' => 'こおり、エスパー', 'エレブー' => 'でんき', 'ブーバー' => 'ほのお', 'カイロス' => 'むし', 'ケンタロス' => 'ノーマル', 'コイキング' => 'みず', 'ギャラドス' => 'みず', 'ラプラス' => 'みず', 'メタモン' => 'ノーマル', 'イーブイ' => 'ノーマル', 'シャワーズ' => 'みず', 'サンダース' => 'でんき', 'ブースター' => 'ほのお', 'ポリゴン' => 'エスパー', 'オムナイト' => 'みず、じめん', 'オムスター' => 'みず、じめん', 'カブト' => 'みず、じめん', 'カブトプス' => 'みず、じめん', 'プテラ' => 'じめん、ドラゴン', 'カビゴン' => 'ノーマル','ファイヤー' => 'ほのお', 'ファイヤー' => 'ほのお', 'サンダー' => 'でんき', 'フリーザー' => '氷', 'ミニリュウ' => 'ドラゴン', 'ハクリュー' => 'ドラゴン', 'カイリュウ' => 'ドラゴン', 'ミュウツー' => 'エスパー', 'ミュウ' => 'エスパー' ]; echo $pokemon['ポケモン名'] . PHP_EOL;例えば
echo $type['ミュウツー'] . PHP_EOL; //実行結果 エスパーこんな感じ。
もっと効率いいやり方ありそう。
疲れた。
追記
ちなみにKeyの部分を取り出したいのであれば
foreach文を使うと良いforeach ($pokemon as $name => $type) { echo $name; echo '<br/>'; }
- 投稿日:2020-07-11T00:02:52+09:00
Laravel 6 $ composer require laravel/uiを実行するとエラーが発生する
目的
- Laravel6 のアプリにユーザ認証機能を付与しようと思い
$ composer require laravel/ui
を実行した時にエラーになった話をまとめる。実施環境
- ハードウェア環境
項目 情報 OS macOS Catalina(10.15.5) ハードウェア MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) プロセッサ 2 GHz クアッドコアIntel Core i5 メモリ 32 GB 3733 MHz LPDDR4 グラフィックス Intel Iris Plus Graphics 1536 MB 問題までの経緯
- 下記の記事の方法でDockerにてLaravelの環境を構築した。
- 下記の記事の「ライブラリのインストール」の作業まで実施した。
下記コマンドを実行してライブラリのインストールを行おうとした。
$ composer require laravel/ui問題
- エラーが発生してライブラリをインストールすることができない。
エラー内容を下記に記載する。
bash-4.2# composer require laravel/ui Using version ^2.1 for laravel/ui ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Your requirements could not be resolved to an installable set of packages. Problem 1 - Conclusion: remove laravel/framework v6.18.23 - Conclusion: don't install laravel/framework v6.18.23 - laravel/ui 2.x-dev requires illuminate/filesystem ^7.0 -> satisfiable by illuminate/filesystem[7.x-dev, v7.0.0, v7.0.1, v7.0.2, v7.0.3, v7.0.4, v7.0.5, v7.0.6, v7.0.7, v7.0.8, v7.1.0, v7.1.1, v7.1.2, v7.1.3, v7.10.0, v7.10.1, v7.10.2, v7.10.3, v7.11.0, v7.12.0, v7.13.0, v7.14.0, v7.14.1, v7.15.0, v7.16.0, v7.16.1, v7.17.0, v7.17.1, v7.17.2, v7.18.0, v7.2.0, v7.2.1, v7.2.2, v7.3.0, v7.4.0, v7.5.0, v7.5.1, v7.5.2, v7.6.0, v7.6.1, v7.6.2, v7.7.0, v7.7.1, v7.8.0, v7.8.1, v7.9.0, v7.9.1, v7.9.2]. - laravel/ui v2.1.0 requires illuminate/filesystem ^7.0 -> satisfiable by illuminate/filesystem[7.x-dev, v7.0.0, v7.0.1, v7.0.2, v7.0.3, v7.0.4, v7.0.5, v7.0.6, v7.0.7, v7.0.8, v7.1.0, v7.1.1, v7.1.2, v7.1.3, v7.10.0, v7.10.1, v7.10.2, v7.10.3, v7.11.0, v7.12.0, v7.13.0, v7.14.0, v7.14.1, v7.15.0, v7.16.0, v7.16.1, v7.17.0, v7.17.1, v7.17.2, v7.18.0, v7.2.0, v7.2.1, v7.2.2, v7.3.0, v7.4.0, v7.5.0, v7.5.1, v7.5.2, v7.6.0, v7.6.1, v7.6.2, v7.7.0, v7.7.1, v7.8.0, v7.8.1, v7.9.0, v7.9.1, v7.9.2]. - don't install illuminate/filesystem 7.x-dev|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.0.0|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.0.1|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.0.2|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.0.3|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.0.4|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.0.5|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.0.6|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.0.7|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.0.8|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.1.0|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.1.1|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.1.2|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.1.3|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.10.0|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.10.1|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.10.2|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.10.3|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.11.0|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.12.0|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.13.0|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.14.0|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.14.1|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.15.0|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.16.0|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.16.1|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.17.0|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.17.1|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.17.2|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.18.0|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.2.0|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.2.1|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.2.2|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.3.0|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.4.0|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.5.0|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.5.1|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.5.2|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.6.0|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.6.1|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.6.2|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.7.0|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.7.1|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.8.0|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.8.1|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.9.0|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.9.1|don't install laravel/framework v6.18.23 - don't install illuminate/filesystem v7.9.2|don't install laravel/framework v6.18.23 - Installation request for laravel/framework (locked at v6.18.23, required as ^6.2) -> satisfiable by laravel/framework[v6.18.23]. - Installation request for laravel/ui ^2.1 -> satisfiable by laravel/ui[2.x-dev, v2.1.0].問題解決までの経緯
先のエラーの内容を和訳した。下記に和訳したエラー内容を記載する。
./composer.jsonが更新されました パッケージ情報を含むComposerリポジトリの読み込み 依存関係の更新(require-devを含む) 要件をインストール可能なパッケージのセットに解決できませんでした。 問題1 -結論:laravel / framework v6.18.23を削除 -結論:laravel / framework v6.18.23をインストールしない -laravel / ui 2.x-devには、illuminate / filesystem ^ 7.0が必要です-> luminate / filesystem [7.x-dev、v7.0.0、v7.0.1、v7.0.2、v7.0.3、v7.0.4、v7 .0.5、v7.0.6、v7.0.7、v7.0.8、v7.1.0、v7.1.1、v7.1.2、v7.1.3、v7.10.0、v7.10.1、v7.10.2、v7.10.3、v7.11.0 、v7.12.0、v7.13.0、v7.14.0、v7.14.1、v7.15.0、v7.16.0、v7.16.1、v7.17.0、v7.17.1、v7.17.2、v7.18.0、v7.2.0、v7 .2.1、v7.2.2、v7.3.0、v7.4.0、v7.5.0、v7.5.1、v7.5.2、v7.6.0、v7.6.1、v7.6.2、v7.7.0、v7.7.1、v7.8.0 、v7.8.1、v7.9.0、v7.9.1、v7.9.2]。 -laravel / ui v2.1.0には、illuminate / filesystem ^ 7.0が必要です-> Illuminate / filesystemによって満たすことができます、v7.0.6、v7.0.7、v7.0.8、v7.1.0、v7.1.1、v7.1.2、v7.1.3、v7.10.0、v7.10.1、v7.10.2、v7.10.3、v7.11.0、v7 .12.0、v7.13.0、v7.14.0、v7.14.1、v7.15.0、v7.16.0、v7.16.1、v7.17.0、v7.17.1、v7.17.2、v7.18.0、v7.2.0、v7.2.1 、v7.2.2、v7.3.0、v7.4.0、v7.5.0、v7.5.1、v7.5.2、v7.6.0、v7.6.1、v7.6.2、v7.7.0、v7.7.1、v7.8.0、v7 .8.1、v7.9.0、v7.9.1、v7.9.2]。 -luminate / filesystem 7.x-devをインストールしない| laravel / framework v6.18.23をインストールしない -luminate / filesystem v7.0.0をインストールしない| laravel / framework v6.18.23をインストールしない -Illuminate / Filesystem v7.0.1をインストールしない| laravel / framework v6.18.23をインストールしない -Illuminate / Filesystem v7.0.2をインストールしない| laravel / framework v6.18.23をインストールしない -luminate / filesystem v7.0.3をインストールしない| laravel / framework v6.18.23をインストールしない -Illuminate / Filesystem v7.0.4をインストールしない| laravel / framework v6.18.23をインストールしない -luminate / filesystem v7.0.5をインストールしない| laravel / framework v6.18.23をインストールしない -luminate / filesystem v7.0.6をインストールしない| laravel / framework v6.18.23をインストールしない -luminate / filesystem v7.0.7をインストールしない| laravel / framework v6.18.23をインストールしない -Illuminate / Filesystem v7.0.8をインストールしない| laravel / framework v6.18.23をインストールしない -Illuminate / Filesystem v7.1.0をインストールしない| laravel / framework v6.18.23をインストールしない -Illuminate / Filesystem v7.1.1をインストールしない| laravel / framework v6.18.23をインストールしない -luminate / filesystem v7.1.2をインストールしない| laravel / framework v6.18.23をインストールしない -luminate / filesystem v7.1.3をインストールしない| laravel / framework v6.18.23をインストールしない -Illuminate / Filesystem v7.10.0をインストールしない| laravel / framework v6.18.23をインストールしない -Illuminate / Filesystem v7.10.1をインストールしない| laravel / framework v6.18.23をインストールしない -Illuminate / Filesystem v7.10.2をインストールしない| laravel / framework v6.18.23をインストールしない -Illuminate / Filesystem v7.10.3をインストールしない| laravel / framework v6.18.23をインストールしない -Illuminate / Filesystem v7.11.0をインストールしない| laravel / framework v6.18.23をインストールしない -Illuminate / Filesystem v7.12.0をインストールしない| laravel / framework v6.18.23をインストールしない -Illuminate / Filesystem v7.13.0をインストールしない| laravel / framework v6.18.23をインストールしない -Illuminate / Filesystem v7.14.0をインストールしない| laravel / framework v6.18.23をインストールしない -Illuminate / Filesystem v7.14.1をインストールしない| laravel / framework v6.18.23をインストールしない -Illuminate / Filesystem v7.15.0をインストールしない| laravel / framework v6.18.23をインストールしない -Illuminate / Filesystem v7.16.0をインストールしない| laravel / framework v6.18.23をインストールしない -Illuminate / Filesystem v7.16.1をインストールしない| laravel / framework v6.18.23をインストールしない -Illuminate / Filesystem v7.17.0をインストールしない| laravel / framework v6.18.23をインストールしない -Illuminate / Filesystem v7.17.1をインストールしない| laravel / framework v6.18.23をインストールしない -Illuminate / Filesystem v7.17.2をインストールしない| laravel / framework v6.18.23をインストールしない -Illuminate / Filesystem v7.18.0をインストールしない| laravel / framework v6.18.23をインストールしない -Illuminate / Filesystem v7.2.0をインストールしない| laravel / framework v6.18.23をインストールしない -luminate / filesystem v7.2.1をインストールしない| laravel / framework v6.18.23をインストールしない -luminate / filesystem v7.2.2をインストールしない| laravel / framework v6.18.23をインストールしない -Illuminate / Filesystem v7.3.0をインストールしない| laravel / framework v6.18.23をインストールしない -Illuminate / Filesystem v7.4.0をインストールしない| laravel / framework v6.18.23をインストールしない -Illuminate / Filesystem v7.5.0をインストールしない| laravel / framework v6.18.23をインストールしない -Illuminate / Filesystem v7.5.1をインストールしない| laravel / framework v6.18.23をインストールしない -Illuminate / Filesystem v7.5.2をインストールしない| laravel / framework v6.18.23をインストールしない -luminate / filesystem v7.6.0をインストールしない| laravel / framework v6.18.23をインストールしない -Illuminate / Filesystem v7.6.1をインストールしない| laravel / framework v6.18.23をインストールしない -Illuminate / Filesystem v7をインストールしないでください。バージョンに関するエラーが出ている、おそらく先のコマンドを実行し、ライブラリを取得するにはLaravelのバージョンばあっていないというエラーが出ている。しかしLaravelのバージョンは7にしたくない、Laravel6で本ライブラリをインストールするコマンドを探す。
下記コマンドを実行してライブラリのインストールを試してみた。
$ composer require laravel/ui 1.*ライブラリのインストールは正常に完了した。
参考文献