A Day In The Boy's Life -102ページ目

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

PHPの小文字から始まる関数が4405個もあってびっくりした件 @ ゆーすけべー日記


それ、get_fun・・・ってはてブコメント欄ですでに指摘があったか。

関数の数以外にもクラスや定数、変数の数も調べることが出来たりします。



利用できる関数やクラスの一覧を取得する


get_defined_functions 関数で利用できる関数一覧を取得することができます。

ただし、あくまで自分の環境で利用できる関数なのでPHP全体で使える関数の数とは異なります。


$ php -r 'var_dump(get_defined_functions());'
array(2) {
  ["internal"]=>
  array(1529) {
    [0]=>
    string(12) "zend_version"
    [1]=>
    string(13) "func_num_args"
    [2]=>
    string(12) "func_get_arg"
    [3]=>
    string(13) "func_get_args"
    [4]=>
    string(6) "strlen"
    [5]=>
    string(6) "strcmp"
-snip-
    [1526]=>
    string(27) "xmlwriter_write_dtd_attlist"
    [1527]=>
    string(23) "xmlwriter_output_memory"
    [1528]=>
    string(15) "xmlwriter_flush"
  }
  ["user"]=>
  array(0) {
  }
}


それでも1500を超え取る・・・。

もし自分オリジナルで作成した関数(includeやrequireしているもの含め)がある場合は、最後の"user"キーの所に表示されるので、使い方によっては便利な関数かもしれません。


  ["user"]=>
  array(1) {
    [0]=>
    string(6) "myfunc"
  }


自分も関数名までは覚えているものはほとんど無く、過去に「あーこういう動きする関数って確かあったなぁ」ぐらいしか覚えてません。

そういう意味では、マニュアルサイト は超重要。


お次は、クラスの場合。

クラスは、get_declared_classes 関数を利用します。

クラスなんて定義してないよっと見てみると・・・。


$ php -r 'var_dump(get_declared_classes());'
array(96) {
  [0]=>
  string(8) "stdClass"
  [1]=>
  string(9) "Exception"
  [2]=>
  string(14) "ErrorException"
  [3]=>
  string(11) "LibXMLError"
-snip-
  string(6) "PDORow"
  [93]=>
  string(9) "XMLReader"
  [94]=>
  string(9) "XMLWriter"
  [95]=>
  string(13) "XSLTProcessor"
}


え?こんなにあるの?って感じで。

こちらもユーザー定義のクラスがある場合でも一覧に出力されます。



定義済みの定数や変数を取得する


定義済み定数を取得したい場合は、get_defined_constants 関数を使います。


$ php -r 'var_dump(get_defined_constants());'
array(1300) {
  ["E_ERROR"]=>
  int(1)
  ["E_WARNING"]=>
  int(2)
  ["E_PARSE"]=>
  int(4)
  ["E_NOTICE"]=>
  int(8)
  ["E_STRICT"]=>
  int(2048)
  ["E_CORE_ERROR"]=>
  int(16)
  ["E_CORE_WARNING"]=>
  int(32)
  ["E_COMPILE_ERROR"]=>
  int(64)
-snip-
  ["STDIN"]=>
  resource(1) of type (stream)
  ["STDOUT"]=>
  resource(2) of type (stream)
  ["STDERR"]=>
  resource(3) of type (stream)
}


PHP内部で定義されている定数だけでも1300・・・。
気を取り直して、定義済みの変数一覧はget_defined_vars で取得できるので表示してみると・・・。


$ php -r 'var_dump(get_defined_vars());'
array(8) {
  ["GLOBALS"]=>
  &array(8) {
    ["GLOBALS"]=>
    &array(8) {
      ["GLOBALS"]=>
      *RECURSION*
      ["argv"]=>
      array(1) {
        [0]=>
        string(8) "test.php"
      }
      ["argc"]=>
      int(1)
-snip-
    ["DOCUMENT_ROOT"]=>
    string(0) ""
    ["REQUEST_TIME"]=>
    int(1267630052)
    ["argv"]=>
    array(1) {
      [0]=>
      string(1) "-"
    }
    ["argc"]=>
    int(1)
  }
}

グローバル変数もこんなにあるのか・・・。

こちらもユーザー定義の定数や変数が出せるので、無駄に変数を定義していないかリファクタリングなどに活用できるかもしれません。


まぁ、デフォルトで定義済みのものがあまりの多いんですけどね・・・。





かなり地味なアドオンなんですが・・・。

FlagTab は、FireFoxのタブを色分けしてくれるアドオンです。

普段は色分けなんてする必要なかったりしますが、システム開発なんかではサイトによって色分けしたり、テスト環境と本番環境を区別するために、URL以外の要素で判断したかったりもします。

そういったときには便利に使えるかもしれません。


A Day In The Boy's Life-FlagTab-1



FlagTabの基本機能


タブを開いてアクティブにした状態でそのタブを右クリックし、FlagTab Optionsの中から好きな色を選択できます。

デフォルトで4色が登録されており、好きな色を選択するとその色にタブが切り替わるようになっています。

少ない手間でさっとタブにマーカーを付けることが出来ます。


- FlagTabのオプションメニュー
A Day In The Boy's Life-FlagTab-2


もし色自体が気に入らない場合は、Optionsメニューを開き、Colorsタブの中からタブの色や文字の色を指定することも出来ます。

色はカラーパレットから選択できるようになっているの、難しく指定する必要もありません。


- タブ上の文字の色も変更可能
A Day In The Boy's Life-FlagTab-3


大きな特徴として特定のドメイン(URL)を開くと自動的にタブに色をつけると言うことも出来ます。

(ただし、一部上手く動かなかったりもしますが・・・)


- URLのパターンでタブを色分け
A Day In The Boy's Life-FlagTab-4


先に書いたような、テスト用環境と本番環境とでタブの色分けをして見分けやすいようにしたいと言った場合、そのURLパターンを書いておけば簡単に設定することができます。


使いどころは限られるかもしれませんが、時に便利に使えるアドオンかもしれません。




タスクを管理すると言うと漠然とやらないといけないことをリスト化し、スケジュールとステータスを管理するぐらいとしか考えてなかったりしますが、このやり方一つで結構仕事のやり方と言うものも変わってくるもんだなと、最近感じるようになりました。


アジャイルは、アジャイルソフトウェア開発 から取ったものですが、小さな機能にわけてその小さな機能単位で開発を進めていくソフトウェア開発手法です。

タスク管理とは全く関係がないものですが、アジャイル開発の人同士の相互作用を重んじたり、変化に俊敏に対応できるというところはタスク管理をしていく中ではメリットとなりえる部分ではないかと思います。

昔は、ゴールをイメージしてそこまでのあらゆるマイルストンを一つのタスクとして管理していたりしましたが、今そのタスクをもっと細かい単位で管理し、クリアしたら次のタスクにすぐ移るという反復を意識していたりします。

これにより、大きく3つの効果があるのかなと感じています。


・ やらないといけないことがはっきりわかる

・ 仕事をコントロールしやすくなる

・ 仕事が進んでる楽しさがわかる


基本的に私の場合、「私のタスク管理術 」に書いたようにGoogleデスクトップのタスク管理用ガジェットを入れて、そこに細かなタスクを追加して管理しています。

たとえ、「○○さんへメールの変身をする」という5分で終るような作業であっても追加するようにしています。

ツールは特に何でも良いのですが、細かなタスクが網羅的に記述でき、その優先度や関連性がわかりやすいものが良いかと思います。



やらないといけないことがはっきりわかる


タスク管理が苦手という人は、そもそもやらないといけないことが見えてなかったりもします。

漠然としたマイルストンを引いて、試行錯誤しながらタスクをこなしていくという人もいたりしますが、これではタスク自体に漏れがあったり、どれだけの時間がかかりそうなのかの読みがぶれてしまいます。

細かいタスクに落とし込んでみると、全体としてどれだけのことをやらないといけないのか、その見通しがつけやすくなります。


設計資料の作成にどれだけの時間がかかるのかを見積もるより、その中の一項目を書くのにどれだけの時間がかかりそうか見積もる方が時間のぶれは少なくて済みます。

また、その一部分の資料を書くために何の情報が必要で、それはどういった作業により出てくるものなのか、という細かいタスクに分けることでより正確な見積もりも出来るでしょう。


最初に網羅的にタスクをあげなくてはとあまり強く意識する必要もありません。

追加するタスクがあれば、都度追加していけばよいかと思います。

細かいタスク管理ゆえに後続のタスクへの影響はあまり大きくなくて済んだりするわけです。


どれだけの時間がかかりそうかの見通しを立てることは、精神的にも楽になったりします。

大きなタスクだと巨大な壁をよじ登ることのように感じられますが、細かく分けることで一歩ずつ進めば何とかなりそうだと言う気持ちにも変わってきます。


単にタスクの漏れをなくすことや時間の見積もりをすることだけでなく、仕事をやりやすい環境を作ることが出来る効果もあるのではないかと感じます。



仕事をコントロールしやすくなる


仕事と言うのはコントロールされるより、自分でコントロールしてやっていったほうが楽しいものです。

タスクを細かく管理していくことで、そのコントロールしやすい環境に持ち込めます。


例えば、資料を書くというタスクでも、まずは資料のページ構成や目次レベルを作ってみる、そしてそこでレビューを受けることで、レビューアの意見を早期に取り入れることができ、軌道修正が効きやすくなります。

仕事は何らかの作業が発生したらゴールまでキャッチボールを続けるようなもので、常にどちらかの確認を取りながら最終合意へ向かっていきます。

タスクを終らせると言うことは、一方にそのボールを投げた状態にもなり、別の作業に移ることが可能になります。

タスクの粒度を荒く設定しているとなかなかボールを投げることが出来なくなるわけです。


そして、手戻りが発生したときの影響度も大きくなったりします。

基本的には、タスクの管理方法は


1. タスクを洗い出す

2. タスクを実行する

3. タスクのステータスを管理(実行中、完了などのステータス確認や報告など)する


の3点だけで済みます。

このステップを繰り返すことで、良い流れを作り出すことができるのではと感じます。



仕事が進んでる楽しさがわかる


やはり前に進んでいる感覚と言うのは、前向きな考えにしてくれます。

大きなタスクだと後何をやらないといけないのか、本当にこの期間で終るのか、という気持ちにもなったりしますが、細かいタスクを1つ1つクリアしていくことで、自分が前に進んでいっている感覚を感じ取ることが出来ます


反復するプロセスが上手く軌道に乗れば、それがいいスパイラルを生んでくれたりします

仕事が管理されていると感じれば感じるほど後ろ向きな気持ちも生まれますし、やることの道筋がはっきりしている方が前に進みやすいでしょう。


単に言われたことをメモしてタスクをこなしていくのではなく、タスク管理のやり方一つで随分と仕事の感覚も違ってくるものです。

どうせやるものなら楽しく仕事はしたいもんですからね。