oss-gate / workshop

OSSの開発に未参加または参加したことはあるけどまだ自信がない人を後押しするワークショップ用のリポジトリー
124 stars 547 forks source link

OSS Gate Workshop: Fukuoka: 2019-01-15: garcons: cakephp/chronos: Work log #1024

Closed MizukiMatsutani closed 5 years ago

MizukiMatsutani commented 5 years ago

This is a work log of a "OSS Gate workshop". "OSS Gate workshop" is an activity to increase OSS developers. Here's been discussed in Japanese. Thanks.

作業ログ作成時の説明

以下のテンプレートを埋めてタイトルに設定します。埋め方例はスクロールすると見えてきます。

OSS Gate Workshop: ${LOCATION}: ${YEAR}-${MONTH}-${DAY}: ${ACCOUNT_NAME}: ${OSS_NAME}: Work log

タイトル例↓:

OSS Gate Workshop: Tokyo: 2017-01-16: kou: Rabbit: Work log

OSS Gateワークショップ関連情報

monochromegane commented 5 years ago

わいわい!

MizukiMatsutani commented 5 years ago

開始する

monochromegane commented 5 years ago

ライセンス一覧: https://opensource.org/licenses/alphabetical

MizukiMatsutani commented 5 years ago

「chronos」でググるが、全然違うものばっかりヒットするので、「chronos php」でググると良さげ。 GitHubとCakePHPでの利用方法(公式っぽい)Documentが見つかった。が、CakePHPは動かさないので、除外

MizukiMatsutani commented 5 years ago

GitHubでライセンス見る https://github.com/cakephp/chronos/blob/master/LICENSE

MizukiMatsutani commented 5 years ago

↑のページで「MIT License」ってなっているので、ライセンス一覧(https://opensource.org/licenses/alphabetical)から探す

MizukiMatsutani commented 5 years ago

ライセンス一覧にMITがあったので、OSSと判断

MizukiMatsutani commented 5 years ago

GitHubのREADMEを見てローカルにインストールしてみる https://github.com/cakephp/chronos

MizukiMatsutani commented 5 years ago

説明読んで見る。

Chronos aims to be a drop-in replacement for nesbot/carbon. It focuses on providing immutable date/datetime objects. Immutable objects help ensure that datetime objects aren't accidentally modified keeping data more predictable.

Google先生に訳してもらってなんとなく掴む。「carbonに変わるイミュータブルで予期せぬバグが起きにくいよ」らしい。 すげーいいじゃん。

MizukiMatsutani commented 5 years ago

インストールからやってみる。 https://github.com/cakephp/chronos#installation

monochromegane commented 5 years ago

経過がわかりやすいGreat issueだ!

MizukiMatsutani commented 5 years ago

composer require cakephp/chronos を叩く

流石にこのライブラリ落とすような人は大丈夫だけど、

mkdir path/to/your/directory
cd path/to/your/directory

とか当たり前すぎるけどcomposerとかがインストール前提であったがいいかも

MizukiMatsutani commented 5 years ago

インストールできたっぽい

$ composer require cakephp/chronos
Using version ^1.2 for cakephp/chronos
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Installing cakephp/chronos (1.2.3): Downloading (100%)         
Writing lock file
Generating autoload files
MizukiMatsutani commented 5 years ago

GitHubにあるサンプルソースを作って実行してみる。 以下をPrint.phpとして保存。

<?php
require 'vendor/autoload.php';

use Cake\Chronos\Chronos;

printf("Now: %s", Chronos::now());
MizukiMatsutani commented 5 years ago

実行してみる

$ php Print.php 
Now: 2019-01-15 11:20:05

できた

tokibi commented 5 years ago

順調そう

MizukiMatsutani commented 5 years ago

と思ったら、今20:20なんだけど。。。

MizukiMatsutani commented 5 years ago
$ date
2019年 1月15日 火曜日 20時22分43秒 JST

UTCなんかな

MizukiMatsutani commented 5 years ago

とりあえず、READMEを終えてから後でAPIドキュメントみて解決しよう

MizukiMatsutani commented 5 years ago

次に進む。けど、これはcarbonライブラリからの移行手順なので、今回はすっ飛ばす https://github.com/cakephp/chronos#migrating-from-carbon

MizukiMatsutani commented 5 years ago

ここやってみる。 https://github.com/cakephp/chronos#immutable-object-changes

MizukiMatsutani commented 5 years ago

サンプルには

// This will lose modifications
$date = new Chronos('2015-10-21 16:29:00');
$date->modify('+2 hours');

// This will keep modifications
$date = new Chronos('2015-10-21 16:29:00');
$date = $date->modify('+2 hours');

ってあるけど、イミュータブルであるよ!!て押したいのであれば、それを確認するソースがあってもいいんでない?

MizukiMatsutani commented 5 years ago

こうして、イミュータブルを確認した

// This will lose modifications
$date = new Chronos('2015-10-21 16:29:00');
$date->modify('+2 hours');

var_dump($date); // '2015-10-21 16:29:00'のまま!

// This will keep modifications
$date = new Chronos('2015-10-21 16:29:00');
$date2 = $date->modify('+2 hours');

var_dump($date !== $date2); // true!
var_dump($date); // '2015-10-21 16:29:00'のまま!
var_dump($date2); // '2015-10-21 18:29:00'になった
MizukiMatsutani commented 5 years ago

つぎ、ミュータブルを見る https://github.com/cakephp/chronos#getting-mutable-objects

monochromegane commented 5 years ago

良い提案〜

MizukiMatsutani commented 5 years ago

サンプルはこれ

$time = new Chronos('2015-10-21 16:29:00');
$mutable = $time->toMutable();

$date = new Date('2015-10-21');
$mutable = $date->toMutable();

new Date()で落ちる。 PHPってDateクラスあったっけ?DateTimeクラスの間違い?

monochromegane commented 5 years ago

見つけましたね...!! 既にIssueやPullRequestで同様のフィードバックがないかなども確認しておいても良さそうです

MizukiMatsutani commented 5 years ago

use Cake\Chronos\Date; がいる!! もしくは $date = new Cake\Chronos\Date(); のほうが親切

monochromegane commented 5 years ago

来ましたね

monochromegane commented 5 years ago

落ちた時のエラーメッセージもメモしておくと良さそうですね~!

MizukiMatsutani commented 5 years ago

Fatal error: Uncaught Error: Class 'Date' not found のエラーが出た!

MizukiMatsutani commented 5 years ago

こっちもイミュータブルとと同じでミュータブルであることを確認できるサンプルがあるとメリット感あるかも。

MizukiMatsutani commented 5 years ago

https://github.com/oss-gate/workshop/issues/1024#issuecomment-454364701 指摘いただいたようにIssueとかPRみてみる。

MizukiMatsutani commented 5 years ago

次回、Issueを上げる。

oss-gate-issue-cleaner[bot] commented 5 years ago

おつかれさまでした!

後日引き続きワークショップがある場合

後日のワークショップで再開する際に、issueタイトルの日付を更新してreopenしてください!

ワークショップ終了後に続きがしたい場合

issueはクローズしますが、その後も作業を続けていただいて大丈夫です!

是非このissueを活用なさってください。

今後のイベントの案内

現在以下のイベントの開催を予定しています。

参加をお待ちしてます!