取りあえず今年一番言いたいことは、これ本当にいい話なのでみんな見てほしいということです。 今年というかここ数年で一番のスライド。
- 去年よりもさらにブログを書かなかった
- PHPカンファレンス北海道 2016で発表してきました。Prophecyを使ったユニットテスト
- OSS Gate札幌ワークショップに参加しました。
- PGConf.ASIA 2016に行ってきました。
あと適当に動画貼っておきます。
取りあえず今年一番言いたいことは、これ本当にいい話なのでみんな見てほしいということです。 今年というかここ数年で一番のスライド。
あと適当に動画貼っておきます。
「基本からしっかり学ぶ Symfony2 入門」を買った。
基本からしっかり学ぶ Symfony2入門:書籍案内|技術評論社
hidenorigoto/symfony2-book: 基本からしっかり学ぶSymfony2入門 サポートサイト
前回、Write::createFromString('', '')
の引数は2つだったと書いたけど、その意味を見ていなかった。第二引数はv7.0では改行コードだったが、v8.0では削除され引数は1つになったようだ。
debug:container
でエラーとなった。
> php.exe C:\Users\ishida\PhpstormProjects\classic-symfony\bin\console debug:container app.inquiry_csv_builder [Symfony\Component\DependencyInjection\Exception\InvalidArgumentException] The file "C:\Users\ishida\PhpstormProjects\classic-symfony\src\AppBundle\De pendencyInjection/../Resources/config\services.yml" does not contain valid YAML. [Symfony\Component\Yaml\Exception\ParseException] The reserved indicator "@" cannot start a plain scalar; you need to quote t he scalar at line 7 (near "arguments: [%csv_encoding%, @app.inquiry_reposit ory]").
'@app.inquiry_repository'
とシングルクォートで囲む必要があった。
この本の山場であり、Symfonyの最大の特徴ではないかと思う。
Member
のjoinedDate
は@var \DateTime
となっているがstringなのでは?
prototype
がわからない。
members: 山田: {part: トランペット, joinedDate: "2010-10-01"} 田中: {part: バイオリン, joinedDate: "2008-04-10"}
同じようなものを繰り返す時に使うということか。
例えばこれを
members: - {name: 山田, part: トランペット, joinedDate: "2010-10-01"} - {name: 田中, part: バイオリン, joinedDate: "2008-04-10"}
と書くこともできるのだろうか。
できた。
https://github.com/iakio/classic-symfony/commit/d9f4e70820c180996ec9b8704290f450e5893d73
でも一意な識別子がある場合は元の書き方の方が良さそうだ。
「基本からしっかり学ぶ Symfony2 入門」を買った。
基本からしっかり学ぶ Symfony2入門:書籍案内|技術評論社
hidenorigoto/symfony2-book: 基本からしっかり学ぶSymfony2入門 サポートサイト
「お問い合わせエンティティへの管理フィールドの追加」で、
Inquiry
にprocess_status
、process_memo
を追加するところでエラーとなった。
> php.exe C:\Users\ishida\PhpstormProjects\classic-symfony\bin\console doctrine:schema:update --force Updating database schema... [Doctrine\DBAL\Exception\NotNullConstraintViolationException] An exception occurred while executing 'ALTER TABLE inquiry ADD process_stat us VARCHAR(20) NOT NULL': SQLSTATE[23502]: Not null violation: 7 ERROR: 列"process_status"にはNULL値 があります [Doctrine\DBAL\Driver\PDOException] SQLSTATE[23502]: Not null violation: 7 ERROR: 列"process_status"にはNULL値 があります [PDOException] SQLSTATE[23502]: Not null violation: 7 ERROR: 列"process_status"にはNULL値 があります doctrine:schema:update [--complete] [--dump-sql] [-f|--force] [--em [EM]] [-h|--help] [-q|--quiet] [-v|vv|vvv|--verbose] [-V|--version] [--ansi] [--no-ansi] [-n|--no-interaction] [-e|--env ENV] [--no-debug] [--] <command> Process finished with exit code 1 at 21:06:39. Execution time: 858 ms.
process_status
, process_memo
はNOT NULLだが、この時点で既にレコードが挿入されていたため。
それぞれデフォルト値を指定することにした。
* @ORM\Column(name="process_status", type="string", length=20, options={"default":"0"}) ... * @ORM\Column(name="process_memo", type="text", options={"default":""})
app/console
の実行にPhpStormのCommand Line Tool Supportを使っていたのだが、doctrine/doctrine-fixtures-bundle
をインストールして新しいコマンドを追加したときは、コマンド一覧のリロードが必要となる。
何故Write::createFromString(",")
と引数にカンマを渡しているのだろうと疑問に思っていたのだけれど、サンプルコードを見て意味が分かった。これはダブルクォートじゃなくてシングルクォート2つだった。
つまり、
Write::createFromString(",")
と、カンマを渡しているように見えたがWrite::createFromString('', '')
と、空文字を2つ渡していた買ったのはKindle版。紙の本では見ていない。
この本は全体的にSymfony以外の部分については、よく言えばシンプルに書いてある。Concert
の設計がdate:date
、time:time
というのはなかなか大胆。
「ちょっとした確認用にテストコマンドを用意しておくと便利」はとても良いアドバイスだと思う。
「基本からしっかり学ぶ Symfony2 入門」を買った。
基本からしっかり学ぶ Symfony2入門:書籍案内|技術評論社
hidenorigoto/symfony2-book: 基本からしっかり学ぶSymfony2入門 サポートサイト
本書での確認環境は、
とのことだが、そのままやってもつまらないので
を使っている。
$this->createFormBuilder()->add('name', 'text')
は第二引数にクラス名を渡して->add('name', TextType::class)
と書くようになったようだ。
choiceの時の引数が変わったようだ。
->add('type', ChoiceType::class, [ 'choices' => [ '公演について' => 0, 'その他' => 1 ],
app/config/parameters.yml
とapp/config/parameters.yml.dist
の違いは?
Gmailを使うのであれば、2段階認証を無効にした開発用メールアドレスを用意するという方法の他に、アプリケーションパスワードを設定しても良さそうだ。
レコードの追加時にエラーが発生した。
INSERT INTO blog_article(title, target_date, content) VALUES ('本年もよろしくお願い致します', '2015-1-3', '');
[2016-01-25 20:56:06] [23502] ERROR: 列"id"内のNULL値はNOT NULL制約違反です 詳細: 失敗した行は(null, 本年もよろしくお願い致します, 2015-01-03, )を含みます
blog_article
テーブル定義で、id
列にDEFAULT値が設定されていなかった。Doctrine ORMでは、@GeneratedValueのstrategyにAUTO、SEQUENCE、IDENTITYといったものがあり、PostgreSQLを使う場合はAUTOだとこうなる模様。
SEQUENCEにしても良さそうだけど、とりあえずデータの投入方法を以下のようにしてお茶を濁した。
INSERT INTO blog_article(id, title, target_date, content) VALUES (nextval('blog_article_id_seq'), '本年もよろしくお願い致します', '2015-1-3', '');
とりあえず今年のお気に入りの動画置いておきます
前回から2年近くたってるのか。
coreos-vagrantでDockerしてみてわかったこととかハマったこととか - iakioの日記
ホストはWindows10。
boot2dockerというのを使うんだっけと思って見てみたらDeprecatedと言われたのでDocker Toolboxを使うことにした。
なんとなくKitematicはインストールしなかった。
デスクトップにできたDocker QuickStart Terminalのアイコンを起動してもエラーが出る。VirtualBoxのVMはできているがストレージがマウントされていない。どうやらこの辺のバグを踏んだ模様。VirtualBoxを5.0.4にアップデートして解決。
ドキュメントがいっぱいある。Hello Worldからみてみる。
$ docker run ubuntu:14.04 /bin/echo 'Hello world' Error response from daemon: Cannot start container cde072590d243c292d3aee79e0af405d3d7e2ace3be670ebbd6bec9023686b0c: [8] System error: exec: "C:/Program Files/Git/usr/bin/echo": stat C:/Program Files/Git/usr/bin/echo: no such file or directory
これはスラッシュを1つ増やせばいいとどこかで見た。
$ docker run ubuntu:14.04 //bin/echo 'Hello world' Hello world
しかしbashの方は動かなかった。
$ docker run -t -i ubuntu:14.04 //bin/bash cannot enable tty mode on non tty input
まあdocker-machine sshすればVirtualBoxの方にはsshできるので、そこから同じことはできる。
$ docker-machine.exe ssh default ... docker@default:~$ docker run -t -i ubuntu:14.04 /bin/bash root@83ecba104bec:/#
Working with containersをやってみる。
ドキュメントに、boot2dockerを使ってる場合はlocalhostじゃなくてvirtual hostのIP使ってね。 boot2dockerコマンドで調べられるよと書いてるみたいだけど、今回の場合はdocker-machineコマンド のことだと思う。
$ docker-machine.exe ip default 192.168.99.100
取りあえずこの辺まで。
と思ったけどもうちょっと続く。
VirtualBox側には、C:\Users
がそのまま/c/Users
にマウントされている。名前が一緒なのはかなり便利だ。
例えば僕はWindows上のC\Users\ishida\src\github.com\iakio\phpunit-smartrunner
というディレクトリでPHPの何かしらを開発していて、これをテストしたい場合はこのディレクトリで
$ vendor/bin/phpunit tests
と実行している(だいたいGit-Bashを使っている)。これをDockerのコンテナ内で実行したい場合は、PHPがインストールされたコンテナを用意して(phpというそのままの名前のイメージがDocker Hubにある)、同じディレクトリで、
$ docker run -v /$(pwd):/work -w //work php vendor/bin/phpunit tests
としてやればよい。php:7.0などとしてやれば簡単に複数バージョンでのテストもできそうだ。