技術ブログ - 毎日が成長!

‘symfony’ タグのついている投稿

CloudとNetBeansのSweetな関係

2011年12月1日 by hiro

初めまして、開発メンバーのhiroです。

本日はCloudとNetBeansのSweetな関係について
書きたいと思います。

ここ数年JavaでWebアプリを作っていましたが、久しぶりに
PHPでWebアプリを作っています。

AWSを使って開発していますが、Cloudを使っていない時代は
Linuxサーバを開発用・動作確認用の最低2台をプロジェクト毎に
用意し、ローカルでテキストエディタを使って作ったスクリプトを
FTP経由で手動でアップして開発していました(サーバ上に
リモートログインしてviやvim,emacsなどのテキストエディタで
スクリプトを書いている猛者もいます)。

この手動アップロードが思いのほか手間で、ローカルでWebや
DBサーバを動かし、スクリプト編集即確認できる環境で
開発する人も多くいると思います。

しかし、プロジェクトが複数あると、ローカルに動作環境を
作ることは難しい、というよりも不可能になってきます。
実際の動作環境がまちまちなためです。また、プロジェクトが
増えるときだけでなく、開発メンバーが増えたときも環境を
用意する必要があります。ローカルに同じ環境を用意するのは
各メンバーの環境に対応する必要もあるため、かなり手間な
作業になります。

その点、AWSでは動作環境のコピーはブラウザ上でいくつか
必要な事を指定すれば簡単に行えます。仮想OSを使い、自前で
複製することはできますが、AWSに比べると手間がかかります。

ただ動作環境が簡単に複数作れても、プログラムをコピーする
手間が消える訳ではありません。

そこで、Javaの開発元が中心となって提供しているオープンソースの
開発環境のNetBeansの出番です!

※以後Mac上での説明になります。Windowsユーザの方は
適宜読み替えてください。

インストール

まず、PHPの開発に対応したものをダウンロードサイトから
ダウンロードしてきます。
※JDK1.6が必要なので、別途インストールしてください。

アプリケーションフォルダへ配置し、よく使う方はドッグに
置きましょう。

チェックアウト

まずはSubversionのリポジトリに登録してあるSymfony1.4の
プロジェクトをチェックアウトします。



・チェックアウトに必要な情報を適宜設定してください。

・チェックアウトするリポジトリフォルダを選び、チェック
アウト先のローカルフォルダの指定をします。



/Users/ユーザアカウント/NetBeansProjectsの下あたりに
好きな名前でフォルダを指定しましょう。同じプロジェクトを
ローカルに複数チェックアウトするには、ここのローカルフォルダで
別のフォルダを指定して、チェックアウト先を変更すればOKです。

チェックアウト後に NetBeansプロジェクトをスキャンを
チェックすると、チェックアウト後にプロジェクトが作成されます。



プロジェクト設定

プロジェクトが作成されたら、プロジェクトを右クリックし
プロパティを開きます。

まず、ソースで、エンコーディングやPHPのバージョンを選択します。



次に、実行構成を開き、実行方法を「リモートWebサイト(FTP、
SFTP)」を指定します。プロジェクトURL、開始ファイルを
適宜設定し、アップロードを「保存時」に設定します。



リモート接続の管理をクリックし、Symfonyが動作するサーバへの
接続設定を行います。
※ここで接続テストできますので、すぐに確認できます。



うごかしてみよう!

これで、ローカルでSymfonyプロジェクトを開発・動作させる準備が
整いました。
※動作環境のサーバ側にもチェックアウトしたファイルを置く必要が
あります。NetBeansからアップする事も可能ですが、ファイル数が多く
時間がかかるため、サーバ上で直接チェックアウトしてください。

左にあるプロジェクトウィンドウにプロジェクトの一覧が表示されるので
ファイルを編集して保存してみましょう。



すると、自動でローカルのファイルがサーバ側へコピーされ
変更内容が直ぐに反映されます。1ファイルをアップする時間は
1,2秒ほどと、純粋なファイルコピー時間で考えると遅いですが
体感上は一瞬で、まさにNetBeansとCloudが一体化している感覚です!
気分はまさしく、コレ!



ですが、まだまだSweetと呼ぶには不十分だと思うので
NetBeansの便利さの一部をご紹介します。

Symfonyコマンド

プロジェクトを右クリックし、「Symfony→コマンドを実行」で
Symfonyコマンドの一覧が出てきてローカルでSymfonyコマンドを
実行できます。正確なコマンド名を思い出せなくても、フィルタに
buildなどといれると、buildを含むコマンドを絞り込んでくれるので
労力を減らせます。ダイアログを開いたまま、実行する事も可能で
連続して実行可能です。



コード補完

エディタでメソッドの入力途中にコマンドキーを押しながら¥を押すと
(WindowsはCtrl+Space)、メソッドの候補一覧が出てきます。
メソッドをクリックするとメソッドに書いたコメントが表示され
どんな機能なのかがわかります。
※常にクラスやメソッドにコメントを書く癖をつけると、後になって
苦労が十二分に報われます。

続けて確定すると引数を入力するモードになり、入力ミスを
減らしてくれます。引数のデフォルト値はメソッドの引数に
書いた変数名になります。

また、メソッドが実際にどんな事をやっているのか知りたい
場合にはコマンドキーを押しながらクリックすると(Windowsでは
Ctrl+クリック)そのソースへ移動する事ができます
(クラスに対しても同じ事ができます)。

リファクタリング

クラス名やメソッド名をかえたい場合、クラス/メソッドを
右クリックして、「リファクタリング」→「名前を変更」を
実行し、新しい名前を入れてプレビューを押すと、実際に
そのクラス/メソッドを使っているところまで同時に
変更してくれます(変数名の変更も可能です)。
※ただし、PHPの型指定は大変緩やかなので、NetBeansが
型を認識できず、リファクタリングが全部はできない場合もあります。



ソースの整形

コード規約等がある場合にも、ソースを右クリックして
整形を実行すれば



一発でソースをフォーマットしてくれます。



労力を多いに省いてくれます。
※フォーマットについては、環境設定で細かく設定できます。

タスクウィンドウ

プログラム途中で中断すると、何をすべきか忘れてしまう事もあります。
そんな時はソースコメントに@TODO,@FIXME等でコメントを書きましょう。

するとタスクウィンドウに一覧が出てきます。



モックアップを作っているとき等にこれから作成する処理を@TODOでコメントしたり
バグや問題がある部分に@FIXMEをつける癖を付けていけば、対応漏れも減らせます。

とまだまだ一部ですが(十分多い?)、NetBeansの便利な機能を
ご紹介させていただきました。CloudとNetBeansの組み合わせで
多くのプロジェクト開発に対応した便利な開発環境を構築できるのが
おわかりいただけたかと思います。

まさに、開発者にとってはSweetな関係です!

 

新人がSymfony1.4 Jobeetを始めてみました

2010年12月3日 by nakajima

こんにちは、はじめまして。

2010年4月入社しました新人の中嶋です。

まるっきりの未経験で4月からこの世界に飛び込みました。

初心者の私がつまずき、ぶつかった壁についてこれから書いていきたいと思います。よろしくお願いします。

PHPもフレームワークも初めての私は、ただいまSymfony1.4 jobeetのチュートリアルを使い、先輩とアプリケーション制作対決をしています。

今はやっと4日目までたどり着きました!

3日目:データモデルで湧き上がった疑問点をお話しします。

schema.yml作成 actAsってなに??

columnsやrelationsは馴染みのある名称でしたが、テーブルごとの始めに出てくるactAsはなんだろうと。

actAsとは:

  • Doctrineに搭載されている、ビヘイビア(特定のアクションで起きるオブジェクトの動作)を有効にする機能。actAsでは以下のビヘイビアが設定できます。
名前 説明
Geographical 緯度と経度をモデルに追加してレコード間のマイル/キロメータを計算する機能を提供する。
I18n モデルに国際化機能を追加する。
NestedSet モデルをtraversableツリーに変換する。
Searchable モデルのデータすべてのインデックスを作成して検索可能にする。
Sluggable slugフィールドをモデルに追加し設定に基づいてスラグを自動的に作成する。
SoftDelete 実際にはレコードを削除しない。代わりにdeletedフラグを設定してクエリのselectからすべてのdeleteされたレコードをフィルタリングする。
Timestampable created_atとupdated_atカラムをモデルに追加し、レコードのinsertとupdateをするときにDoctrineにそれらを設定させる。
Versionable モデルをauditログに切り替えすべての変更を記録する。以前のバージョンに簡単に差し戻しする機能を提供する。

今回のjobeetは求人アプリケーションなので、求人情報の作成日時と更新日時を設定するので、Timestampableを使っています。

Jobeetのschema.yml

JobeetCategory:(求人のカテゴリ)
 actAs: { Timestampable: ~ }
 columns:
 name: { type: string(255), notnull: true, unique: true }

JobeetJob:(求人)
 actAs: { Timestampable: ~ }
 columns:
 category_id:  { type: integer, notnull: true }
 type:         { type: string(255) }
 company:      { type: string(255), notnull: true }
 logo:         { type: string(255) }
 url:          { type: string(255) }
 position:     { type: string(255), notnull: true }
 location:     { type: string(255), notnull: true }
 description:  { type: string(4000), notnull: true }
 how_to_apply: { type: string(4000), notnull: true }
 token:        { type: string(255), notnull: true, unique: true }
 is_public:    { type: boolean, notnull: true, default: 1 }
 is_activated: { type: boolean, notnull: true, default: 0 }
 email:        { type: string(255), notnull: true }
 expires_at:   { type: timestamp, notnull: true }
 relations:
 JobeetCategory: { onDelete: CASCADE, local: category_id, foreign: id, foreignAlias: JobeetJobs }
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

schema.ymlが書けたので、あとはチュートリアルに沿って、テーブルまで作成できます。

・データベースの作成

$ mysqladmin -u root -p create jobeet

・データベースの指定

$ php symfony configure:database "mysql:host=localhost;dbname=jobeet" root [rootのパスワード]

・モデルを生成

$ ./symfony doctrine:build --model

・SQLを生成

$ ./symfony doctrine:build --sql

・テーブルを生成

$ ./symfony doctrine:insert-sql

テーブルのカラム情報を見てみると…

mysql> describe jobeet_category;
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | bigint(20)   | NO   | PRI | NULL    | auto_increment |
| name       | varchar(255) | NO   |     | NULL    |                |
| created_at | datetime     | NO   |     | NULL    |                |
| updated_at | datetime     | NO   |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+

created_atとupdated_atができています!

actAsを使うと簡単にできるんですね。

そして、直接データベースを操作しなくていいところが安心です。

actAsで使える、その他のビヘイビアも試したいと思います。

 

今年もAdvent Calendarの時期になりました

2010年12月2日 by asakura

はじめに

こんにちは、プログラマのあさくらです。
今日は技術系Advent Calendarについて小ネタを投稿させて頂きます。

Advent Calendarとは

もともとは、イエスの降誕祭を待ち望み、12月1日からクリスマスまでの1日1つカードの窓をあけていくカードのことだそうです。
転じて、1日1つ技術Tipsや小ネタをリレー形式で投稿していく試みのことを指しています。

日本人にはそれほど馴染みのない習慣なのか、私は昨年のsymfony advent calendarでその存在を知りました。
アドベントカードとも呼ばれるようですが、仮面ライダー龍騎のそれとは少し違うようです。

  • アドベント – Wikipedia

    • アドベント (Advent) とはキリスト教において、イエス・キリストの降誕を待ち望む期間のこと。日本語では「待降節(たいこうせつ)」「降臨節(こうりんせつ)」ともいう。
  • アドベントカード – Wikipedia

    • アドベントカード (Advent card) とは、アドベントの期間中に窓を毎日ひとつずつ開けていくカードである。アドベントカレンダーとも言う。
      カードに作られた窓を1日に1つずつ開けていく。そして、全部の窓を開け終わるとクリスマスを迎えたことを教えてくれる仕掛けになっている。

見ておきたいAdvent Calendar

個人的に見ておきたいなと思ったAdvent Calendarへの情報をまとめてみました。

一回り大きくなって新年を迎えましょう

さくさくっと読み進めていける内容なので、毎日一つ読み進めてもいいですし、年末にまとめてというのも面白そうです。
来年は見るだけではなく、参加する側に回りたいですね。

2010年も残りあとわずか、頑張っていきましょう。