awacleberryの備忘録

アナログ人間のデジタル日記。

PHP Composer の導入

installer のダウンロード

curl -sS https://getcomposer.org/installer | php

コマンドの確認するなら、

php composer.phar

local/bin/compoer に移動しておく。

mv composer.phar /usr/local/bin/composer

~/composer/composer.phar とかにしている人もいるので、ここじゃなきゃいけない、みたいなのはないのかな。分からなくなったら、

which composer

とかすればいい。

プロジェクトを作る

新しくプロジェクトを作るなら、

composer init

で、対話形式に composer.json が作れる。最初に、

Package name (<vendor>/<name>)

ベンダー名/パッケージ名 が聞かれるので、このスラッシュ形式で指定。

Description

プロジェクトの説明を記入。

Author

name <mail address> の形式で指定。

Minimum Stability

最小限の「安定度合い」的なものを聞かれるので、dev, alpha, beta, RC, and stable から適時選択。デフォルトは、stable

Package Type

プロジェクトなら project としてれば良さそう。デフォルトは library

License

オプショナルだけど、ドキュメントは、

Optional, but it is highly recommended to supply this.

と言っている。まぁ、そうだな。

Search for a package: 

いよいよパッケージ。例えば、phpunit など。

[0] phpunit/phpunit
[1] eher/phpunit
[2] jbzoo/phpunit
[3] sugared-rim/phpunit
[4] hiqdev/php-units
[5] task/phpunit
[6] phpunit/phpunit-mock-objects
[7] phpunit/phpunit-selenium
[8] phpunit/phpunit-story
[9] phpunit/phpunit-skeleton-generator
[10] phpunit/dbunit
[11] phpunit/phpunit-dom-assertions
[12] phpunit/phpcov
[13] phpunit/phpunit-mink-trait
[14] phpunit/php-timer

ばーっと候補がでるので、0 を入力。

Enter the version constraint to require (or leave blank to use the latest version)

最新版を使うなら、そのまま return で進む。

Using version ^6.1 for phpunit/phpunit
Search for a package: 

うっす。もういらないので、return で進む。

{
    "name": "hoge/composer-test",
    "description": "this is a test.",
    "type": "project",
    "require-dev": {
        "phpunit/phpunit": "^6.1"
    },
    "authors": [
        {
            "name": "hoge",
            "email": "hoge@huga.com"
        }
    ],
    "require": {}
}

Do you confirm generation [yes]? 

こんな json ができれば、OK。yes で終了。ls で確認すれば、composer.jsonディレクトリに作成されている。

パッケージのインストー

さっそく json で定義したものをインストー

composer install

と、手元の環境の PHP5.5.36 だったので、

  Problem 1
    - phpunit/phpunit 6.1.4 requires php ^7.0 -> your PHP version (5.5.36) does not satisfy that requirement.
    - phpunit/phpunit 6.1.3 requires php ^7.0 -> your PHP version (5.5.36) does not satisfy that requirement.
    - phpunit/phpunit 6.1.2 requires php ^7.0 -> your PHP version (5.5.36) does not satisfy that requirement.
    - phpunit/phpunit 6.1.1 requires php ^7.0 -> your PHP version (5.5.36) does not satisfy that requirement.
    - phpunit/phpunit 6.1.0 requires php ^7.0 -> your PHP version (5.5.36) does not satisfy that requirement.
    - Installation request for phpunit/phpunit ^6.1 -> satisfiable by phpunit/phpunit[6.1.0, 6.1.1, 6.1.2, 6.1.3, 6.1.4].

composer.json を編集して、phpunit のバージョンを phpunit-4.8.35.phar とする。

"require-dev": {
    "phpunit/phpunit": "4.8.35"
},
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 21 installs, 0 updates, 0 removals
  - Installing symfony/yaml (v3.2.8): Downloading (100%)         
  - Installing sebastian/version (1.0.6): Downloading (100%)         
  - Installing sebastian/global-state (1.1.1): Downloading (100%)         
  - Installing sebastian/recursion-context (1.0.5): Downloading (100%)         
  - Installing sebastian/exporter (1.2.2): Downloading (100%)         
  - Installing sebastian/environment (1.3.8): Downloading (100%)         
  - Installing sebastian/diff (1.4.3): Downloading (100%)         
  - Installing sebastian/comparator (1.2.4): Downloading (100%)         
  - Installing doctrine/instantiator (1.0.5): Downloading (100%)         
  - Installing phpunit/php-text-template (1.2.1): Downloading (100%)         
  - Installing phpunit/phpunit-mock-objects (2.3.8):Downloading (100%)         )
  - Installing phpunit/php-timer (1.0.9): Downloading (100%)         
  - Installing phpunit/php-file-iterator (1.4.2): Downloading (100%)         
  - Installing phpunit/php-token-stream (1.4.11): Downloading (100%)         
  - Installing phpunit/php-code-coverage (2.2.4): Downloading (100%)         
  - Installing webmozart/assert (1.2.0): Downloading (100%)         
  - Installing phpdocumentor/reflection-common (1.0): Downloading (100%)          - Installing phpdocumentor/type-resolver (0.2.1): Downloading (100%)         
  - Installing phpdocumentor/reflection-docblock (3.1.1): Downloading (100%)      - Installing phpspec/prophecy (v1.7.0): Downloading (100%)         
  - Installing phpunit/phpunit (4.8.35): Downloading (100%)         
symfony/yaml suggests installing symfony/console (For validating YAML files using the lint command)
sebastian/global-state suggests installing ext-uopz (*)
phpunit/php-code-coverage suggests installing ext-xdebug (>=2.2.1)
phpunit/phpunit suggests installing phpunit/php-invoker (~1.1)
Writing lock file
Generating autoload files

依存モジュールもまとめて、いっぱい。 ls すると、

composer.json    composer.lock   vendor

lock ファイル と vendor ディレクトリができている。vendor という名前のディレクトリに外部の依存モジュールが格納されるので、.gitignore にこのディレクトリを指定しておけば OK。

なお、phpunitphp バージョンの対応は、

PHPUnitとPHPのバージョン対応表

を参考。

パッケージの追加

composer require cebe/markdown

require で追加できる。composer.json と lock ファイルも更新される。バージョン指定する場合は、

composer require hoge/huge:1.1.11

みたいにする。


参考

Markdown を PDF にする

前提

node.js が動くこと。

npm で markdown-pdf をインストー

npm install -g markdown-pdf

pdf に変換

markdown-pdf hoge.md

このままだとスタイルがないので、まず、github のスタイルを拝借。
https://gist.github.com/andyferra/2554919
css のオプションをつけて、

markdown-pdf hoge -s github.css

なお、6系の node.js だとエラーがでるけど、出力はちゃんとできる。

(node:63631) Warning: Possible EventEmitter memory leak detected. 2 end listeners added. Use emitter.setMaxListeners() to increase limit

参考 - マークダウンで文章を書いてHTML / Docx / PDF に変換する

PHPでOS差を吸収する定数を使う

PHP_EOL

改行コードを直接指定すると、

$hoge = "hoge";
echo $hoge, "\n";

みたいにしがち、これだとCRLFに対応できないので、PHP_EOLを使って、

echo $hoge, PHP_EOL ;

にしたほうがよい。環境の違いで、出力をかえてくれるみたい。ちなみに、EOLはEnd of Lineの略。

改行 改行コード
LF \n
CELF \r\n

DIRECTORY_SEPARATOR

ディレクトリパスもつい、

$hoge = "hoge";
$fuga = "fuga";
echo $hoge, "/", $fuga, PHP_EOL;

みたいにしちゃうけど、

echo $hoge, DIRECTORY_SEPARATOR, $fuga, PHP_EOL;

で環境差を吸収できる。

他、PATH_SEPARATORなんかもあるみたい。なお、PHP_OSでOS種を返してくれる。

HHKB Professional JP を購入!

言わずと知れた、Happy Hacking Keyboard をついに購入しました。

ずっと MacBook Pro のノートキーボードを使っていましたが、毎日使うものなんだから拘りを持って、というか、より使いやすいものにして、コスト削減・効率化を測れないかなぁと期待し、思い切って購入です。

f:id:awacleberry:20170420125157j:plain

まず、プログラミング以外にも日常的に日本語の文章を書くので、少し迷いましたが、英字配列ではなく、日本語配列にしました。そして、HHKBと言えば、「白」が一般的ですが、黒が好きな自分なので、「墨」というカラーのモデルにしています。

気になるのは、Type-Sではないので、音がすごい大きい!!個人的には、「押下の心地良さ」と「周囲に気を使う心地悪さ」だったら、後者が前者を食ってしまうんだけど、お家で使う用なので……前者を優先!!

慣れるまで今しばらくかかりそうです。

追記(2017/04/22)

ドライバをインストールして初期設定のまま使っていると、左の キーと Alt がそれぞれ「⌘(コマンド)」と「⌥(オプション)」で、MackBook Pro の配置と逆でした!背面スイッチの5番目をオンにすれば、切り替えられます。

f:id:awacleberry:20170422010134j:plain

スイッチがかなり小さく狭いところにあるので、爪楊枝とかないといじれない感じです。

はてなブログを始めました

ブログを始めるなら、まずは使い方を覚えないといけないので、とりあえず、Markdown のチェック。

Markdown のおさらい

ヘッドライン

# はヘッドライン。html でいう <h1>
## ### で階層を増やせる。html でいう <h2> とか <h3> とか。

# h1
## h2
### h3
#### h4
##### h5

リスト

-*+ はリスト。html でいう <ul><i>

番号付きリスト

数字. は番号付きリスト。html でいう <ol><li>

  1. リスト
  2. リスト
  3. リスト

ボールド

** ** はボールド。html でいう <strong>

ふとってる

イタリック

_ _ はイタリック。html でいう <em>

斜めってる

打ち消し線

~~ ~~ は打ち消し線。html でいう <s>

打ち消されてる

コード

`` はコード。html でいう <code>(インライン)

public class Quote

引用

> は引用。CSSborder-left: solid 4px #666; とかそんなん。

All the world is a stage.

リンク

[テキスト](url) はリンク。html でいう <a href="url">

このブログに自己言及

画像

![代替文字](url) は画像。html でいう <img src="url" alt="代替文字">

ドロイドくん

境界線

*** とか --- は境界線。CSSborder-bottom:solid 1px #666 とかそんなん。


注釈

[^1] は注釈。[^1]: 文章 で注釈内容。

ここに注釈。1

チェックボックス

- [ ] 選択肢1チェックボックス。html でいう <input type="checkbox">
- [x] 選択肢1 はチェック付き。html でいう <input type="checkbox" checked="checked">

チェックボックスが「はてなブログ」でレンダリングされない……

ざっくり主要どころはこんなところかな。

その他のマークアップ

「続きを読む」機能

<!-- more --> は「続きを読む」的なやつらしい

目次

[:contents] は目次を作ってくれる


  1. 注釈です。