2012年12月28日金曜日

Groovyで文字列を連結する際の注意点

Groovyで文字列を連結する場合、+演算子は行末に書くのが無難そう。詳細は下記を参照。

2012年12月21日金曜日

【宣伝】iEverword冬休みセール

Evernoteと連携した単語カードiPhoneアプリ、 iEverwordを、2012/12/21から2013/1/8までの間、冬休みセールとして¥85(通常¥250)で販売します。ご興味のあるかたは、下記リンクをご参照ください。

2012年12月14日金曜日

Gradle Effective Implementation Guide – Chapter 1

以下、Gradle Effective Implementation Guideの1章についての読書メモ。

いわゆるGetting Started+α。Gradle経験者は見出しと実行例をざっとみて、知らないところや気になるところだけ拾い読みすれば大丈夫そう。Gradle初心者は素直に読み進めればよい。

なお、IDE (Eclipse, IntelliJ IDEA)でのGradleの使用については、12章に記述あり。

2012年12月10日月曜日

GradleでTask Ruleを使ってタスクを定義する

GradleでTask Ruleを使ってタスクを定義する方法は、以下の通り。


 addRuleの第1引数に指定したdescriptionは、tasksタスク実行時にRulesのセクションに表示される。第2引数のクロージャでは、特定の条件にマッチするタスク名に対応するタスクを定義する。この例では、‘sample’で始まるタスク名をもつタスクを定義している。

tasksタスクを実行した結果は、以下の通り。
$ gradle tasks
:tasks

------------------------------------------------------------
All tasks runnable from root project
------------------------------------------------------------

Help tasks
----------
dependencies - Displays all dependencies declared in root project 'aaa'.
dependencyInsight - Displays the insight into a specific dependency in root pr
ect 'aaa'.
help - Displays a help message
projects - Displays the sub-projects of root project 'aaa'.
properties - Displays the properties of root project 'aaa'.
tasks - Displays the tasks runnable from root project 'aaa' (some of the displ
ed tasks may belong to subprojects).

Rules
-----
Pattern: sample<ID>

To see all tasks and more detail, run with --all.

Task Ruleとして定義したタスクを実行した結果は、以下の通り。
$ gradle sample1 sample2
:sample1
1
:sample2
2

関連リンク

2012年12月6日木曜日

App Storeで特定期間セールを行うための設定

iPhoneアプリなどのiOSアプリで、特定の期間セールを行う手順は、下記リンクの通り。


なお、Price Tier End Dateはセール価格がもとの価格に戻る日である点に注意。例えば、Price Tier End Dateを12/25に設定すると、12/25になった時点でもとの価格に戻る。12/25までセール価格にしたい場合は、Price Tier End Dateに12/26に設定する必要がある。

また、タイムゾーンについては確かな情報がないが、iTunes ConnectのSales Reportに適用されるタイムゾーンから判断して、ある程度は考慮される模様。

関連リンク

2012年12月5日水曜日

Gradle Effective Implementation Guide – Chapter 11

以下、 Gradle Effective Implementation Guideの11章についての読書メモ。

GradleとCIツールの連携方法について記述。対象のツールは、Jenkins, JetBrains TeamCity およびAtlassian Bambooとなっているが、Jenkinsしか知らないので、Jenkinsの節のみを読む。

JenkinsのGradle Pluginを使い、Gitなどのソースコード管理システムから取得したプロジェクトのビルドスクリプトを実行する手順についての説明。記述は丁寧でわかりやすいが、内容的にはそれ以上でもそれ以下でもない。

Jenkins以外のツールについてもざっと眺めてみたが、記述レベルに変わりはなさそう。

2012年12月4日火曜日

EclipseからGistを登録する

下記リンクを参考に、GitHub Mylyn connector for Eclipseを使って、EclipseのエディタからGistを登録してみました。


具体的には、Eclipseのエディタで任意のテキストを選択し、右クリック後に、「GitHub」-「Create Public Gist」(または「Create Private Gist」)を選択すると、選択中のテキストがGistに登録されます。登録したGistは、Eclipse上ではMylynのタスクとして保存可能です。

Mylynを使ったことがないせいもあり、個人的にはGistをMylynのタスクとして扱うメリットが今ひとつピンときませんでした。また、ポスト時にdescriptionを指定できないのも不満です(タスクのdescriptionを修正してSubmitすることで更新は出来ますが、手間はかえって増えてしまいます)。ただ、スニペットを手軽にGistに登録できるのは確かなので、用途に合えば使ってみるのもよいかもしれません。

なお、現状では、Gistに保存したスニペットを利用するためのユースケースは想定されていないようです(この用途には、Sublime Text 2が良さそうです)。

2012年12月3日月曜日

GradleでJDBCドライバを使用してデータベースを操作する

Gradleで、JDBCドライバを使用してデータベースを操作する方法は、以下の通り。


ビルドスクリプトでJDBCドライバを使用するには、Groovyのクラスローダーにドライバのクラスをロードしておく必要があるらしい。上記のビルドスクリプトを実行した結果は、以下の通り。

$ gradle -q jdbcSample
id:1 name:test

関連リンク

2012年11月30日金曜日

Gradleのカスタムプラグイン内でタスクの依存関係を定義する

Gradleのカスタムプラグイン内でタスクの依存関係を定義する方法は、以下の通り。


TaskのdependsOnメソッドを使って依存関係を定義している。なお、Projectのtaskメソッドは、定義したタスク自身を返す。

上記のビルドスクリプトを実行した結果は、以下の通り。
$ gradle -q second
first
second

2012年11月29日木曜日

Gradleからgitコマンドを使ってgit init

Gradleを使ってコマンドライン経由でgit initを実行する例は、以下の通り。

gitがインストールされている必要はあるが、コマンドライン経由の実行なので、基本的に何でも?できるはず。

関連リンク

2012年11月28日水曜日

GradleからJGitを使ってgit init

JGitのantタスクを使用して、Gradleからgit initを実行する例は、以下の通り。
 

JGitのantタスクからよびだせるgitのサブコマンドは、add, clone, checkout, initだけのようなので、複雑なことをするのであれば、Execタスクを使ってコマンドラインのgitを呼び出したほうがよさそう。

関連リンク

2012年11月27日火曜日

GradleのCopyタスクを使用する際の注意点

GradleのCopyタスクで、コピー先にプロジェクト直下のディレクトリを指定した場合、IOExceptionが発生する点に注意。


回避策としては、antプロパティのcoypタスクを使用する。

関連リンク

2012年11月26日月曜日

Gradleからコマンドラインのコマンドを実行する

Gradleからコマンドラインのコマンドを実行する方法は、以下の通り。


タスクのtypeにはExecを指定する。commandLineプロパティには実行するコマンドと引数をリストととして指定する([]は省略されている)。Windowsの場合、cmd /cから呼び出す必要がある点に注意。

 

関連リンク

2012年11月22日木曜日

Gradle 1.3 リリース

Gradle 1.3がリリースされています。リリースノートは、下記リンクを参照。


まだリリースノートをじっくり読んではいませんが、個人的には、Eclipseとの統合 (IDE Integration) が強化されている点が気になります。具体的には、Eclipse側でScalaやGroovyのライブラリクラスパスコンテナにより依存関係が設定されている場合、GradleのEclipseプラグインではこれらの依存関係を自動的に除外するようになったとのことです。


2012年11月21日水曜日

Building and Testing with Gradleの全文がWeb

Building and Testing with Gradleの全文がWebで公開されているようです。


まだ読んでいない方は、1章の冒頭を読んでみることをお勧めします。詳細は、下記を参照ください。

2012年11月20日火曜日

Gradleのカスタムプラグインに定義したタスクにグループと説明をつける

Gradleのカスタムプラグインに定義したタスクにグループと説明をつける方法は、以下の通り。


4-5行目でグループ、説明を設定している。また、6-9行目のように、クロージャを使って設定することもできる。

なお、build.gradleに普通に定義した(カスタムタスクやカスタムプラグインではない)タスクにグループと説明をつける方法については、下記を参照。

2012年11月19日月曜日

Building and Testing with Gradle - Chapter 1

以下、 Building and Testing With Gradleの1章についての読書メモ。

いわゆるGetting Started的な内容で、Gradleを触ったことのある人なら基本的に読み飛ばしても問題ないが、p1-p3の導入部が興味深い。Gradleを触ったことのない人は、この部分を読んで共感できる部分があるなら、触ってみることをお勧めする。

導入部の概要は、以下の通り。

ビルドツールとしてのGradleの位置づけについて


ビルドツールとしてのGradleの位置づけについて、AntやMavenとの比較をもとに説明。柔軟性はあるが規約のないAnt、規約はあるが規約からはずれたことをするのが面倒なMavenに対し、Gradleが「思慮深い中間地点 (sensible middle ground)」として存在しているとの主張。

Gradleのファイルフォーマット


ビルドファイルのフォーマットについて。XMLがビルドファイルのフォーマットとしていかに向いていないかの説明した上で、以下のように断じているのが小気味いい。
Ultimately, XML is the wrong format for a build file.
Antでプログラムフローの制御ができない(できるとしても、あまりに面倒)のに嫌気がさし、AntからGroovyスクリプトを呼び出したりしているうちに辿り着いたのがGradleだったりするので、個人的には多いに共感できる。

それに対して、Gradleのビルドファイルが、基本的にGroovyスクリプトであることの利点について説明。

DSL


GradleのビルドファイルがGroovyスクリプトであるからといって、生のGroovyでガリガリと書くことは推奨されていない。Gradleはビルドファイルを記述するDSLを提供しているので、基本的にはそれを使い、DSLでカバーされていない部分をプラグインとして拡張するのが望ましいとのこと。趣旨は納得できるが、そこまでいいいながらカスタムプラグインの作成方法について、この本に記述がないのは残念。

関連リンク



Gradleのタスクにグループと説明をつける

Gradleのタスクにはグループと説明をつけることができる。具体的なbuild.gradleの例は、以下の通り。


gradle tasksを実行した結果は、以下の通り。
> gradle -q tasks

------------------------------------------------------------
All tasks runnable from root project
------------------------------------------------------------

Greeting tasks
--------------
hello - Say hello.
hi - Say hi.

(以下省略)

helloタスクとhiタスクがgreetingというグループにまとめて表示されている。また、各タスクの説明も表示されている。

2012年11月16日金曜日

Gradle Effective Implementation Guide ファーストインプレッション

今までGradle関連の本といえば、Building and Testing With Gradleの一択だったのですが、最近Gradle Effective Implementation Guideという本が発売されました。いくつかの章を拾い読みしてみましたが、なかなかの良書だと思います。

著者は、『mrhaki.com - Groovy, Grails and Java Developer』の人。Groovy, Gradle界隈では有名人(だと思う)で、Web検索すると、このサイトがよくヒットします(この本の発売についてのポストもありました)。

内容については、スコープが妥当で、章立てもよく練られています。Chapter 5: Dependency Managementでは、依存関係について一章を割いて説明しており、なかなかツボを心得ています。また、Chapter 10: Writing Custom Tasks and Pluginsで、カスタムプラグインの作成方法をかなり丁寧に説明しているのもポイントが高いです。章の依存関係(Gradleにおける依存関係のことではないですよ)も基本的になさそうなので、必要なトピックだけを拾い読みすることもできそうです。

実際に操作しながら読み進められるスタイルで書かれており、流れがあって読みやすい文章です。また、必要に応じてGradleの内部的な動作についても記述されているので、単に操作方法を知るだけでなく、Gradle自体への理解も深めることができます。

英語も平易で読みやすいので、Gradleを始める最初の一冊としてお勧めできそうです。

2012年11月14日水曜日

GradleのProjectプロパティをプロジェクト外部に定義したスクリプトから設定する

Gradleで、プロジェクト外部に定義したスクリプトを使用して、Projectプロパティを設定する方法は、次の通り。

まず、ユーザディレクトリの.gradleディレクトリに以下のファイルを作成する(名前は、other.gradleとする)。
ext.prop1 = 'value1'
次に、任意のプロジェクトのbuild.gradleで、apply fromを使って上記のother.gradleを読み込む。


上記のbuild.gradleで定義したタスクを実行した結果は、以下の通り。
> gradle -q testProperties
value1

関連リンク

Gradleで外部依存関係に指定したjarファイルをプロジェクト内のディレクトリにコピーする

Gradleで外部依存関係に指定したjarファイルをプロジェクト内のディレクトリにコピーするbuild.gradleは、以下の通り。


上記のcopyLibタスクを実行すると、commons-langのjarがプロジェクト内のlibディレクトリにコピーされる。

2012年11月13日火曜日

Windows上のEclipseでパッケージ・エクスプローラーからGit Bashを開く

dev-xconnecting: OSX上のEclipseでパッケージ・エクスプローラーからターミナルを開く』で紹介したPath Tools Eclipse Plug-inを、Windowsでも使ってみました。

デフォルトの設定で、コマンドプロンプトが開くことは確認できたのですが、ふと思い立ち、下記リンクを参考にGit Bashで開くよう設定してみました。


まずは、下記のバッチファイルを作成(ここでは、cygwin.batとする)し、pathを通しておきます。

@echo off
cd /D "%1"
cmd /c ""C:\Program Files\Git\bin\sh.exe" --login -i"

Eclipseの「Preferences」-「Path Tools」-「Shell at Folder:」に、下記を設定します。

cmd /K start cygwin "{path}"

パッケージ・エクスプローラーで任意のフォルダを選択し、右クリック後に「Path Tools」-「Command Line Shell」を選択すると、Git Bashが開きます。

ただし、上記バッチファイルの通り、コマンドプロンプトを開いた後にGit Bashをcmdで呼び出しているので、exitを2回実行しないとコンソールのウインドウが閉じないのが難点です。

Eclipseでgit stash

Eclipse上のgit (EGit) でstashする方法は、下記リンクの通り。


なお、git stashを使うと、現在のワーキングツリーの状態を一時的に保存することができる。例えばマージでコンフリクトが発生した場合、ローカルの変更を一旦stashすればマージ可能となり、マージ後にstashを適用すればマージ前のワーキングツリー戻ることができる。

 

関連リンク

2012年11月12日月曜日

OSX上のEclipseでパッケージ・エクスプローラーからターミナルを開く

Eclipseで作業中に、プロジェクトのディレクトリでターミナル(コマンドプロンプト)やFinder(エクスプローラー)を開きたいことがよくあるので、パッケージ・エクスプローラーから右クリックでターミナルを開けるEclipseプラグインを物色してみました。Path Tools Eclipse Plug-inが良さそうです。


OSX上のGGTS 3.1.0 (JUNOベース) にインストールしてみましたが、問題なく動作します。Windowsでも動作するようなので、別途試してみようと思います。

2012年11月10日土曜日

Gradleでビルドスクリプトを実行しているOSを判定する

Gradleでビルドスクリプトを実行しているOSを判定する方法は、以下の通り。


OSの判定には、Antのconditionタスクを使用している。

関連リンク

2012年11月9日金曜日

Gradleでbuildscriptに定義した外部依存関係を表示する

Gradleでbuildscriptに定義した外部依存関係(classpath)を表示するbuild.gradleは、以下の通り。


上記のタスクを実行すると、commons-emailだけでなく、commons-emailが依存しているjarも表示される。

関連リンク

Gradleのtask内でprojectプロパティをチェックする際の注意点

Gradleのtask内でprojectプロパティをチェックする際は、ProjectクラスのhasPropertyメソッドを明示的に呼ぶ必要がある。単にhasPropertyメソッドを呼び出した場合は、ProjectクラスではなくTaskクラスのhasPropertyメソッドが呼ばれるので注意。

動作確認用のbuild.propertiesは、以下の通り。


上記タスクの実行結果は、以下の通り。
>gradle -q -Ptest
null
true
>gradle -q
null
false

Gradleのカスタムプラグインを作成する

Gradleのカスタムプラグインを作成する手順は、以下の通り。

ここでは、『dev-xconnecting: build.gradleにプラグインを定義する』でbuild.gradle内に定義したプラグインを、Gradleのカスタムプラグインとしてビルドしてみる。

まず、Groovy用のGradleプロジェクトを作成する(手順は『dev-xconnecting: Eclipse + Gradle STS SupportでGroovy用のGradleプロジェクトを作成』を参照)。

次に、以下のファイルを作成する。

src
 └─main
    ├─groovy
    │      Greeting.groovy
    │      GreetingTask.groovy
    │
    └─resources
        └─META-INF
            └─gradle-plugins
                    greeting.properties
 
Greeting.groovyは以下の通り。


GreetingTask.groovyは以下の通り。


package文やimport文が追加されている以外は、『dev-xconnecting: build.gradleにプラグインを定義する』で作成したクラスと違いはない。

greeting.propertiesにはプラグインの完全修飾クラス名を指定する。

implementation-class=com.example.Greeting

このプロパティファイルの名前(greeting)がプラグイン名となる(apply pluginする際に、この名前を使用する)。

プラグインをビルドしてMavenのローカルリポジトリにデプロイするためのbuild.gradleは、以下の通り。


9-12行目でプラグインのビルド時に必要となる外部依存関係を定義している。gradle buildすると、build/libs内にプラグインのjarファイルが作成される。さらに、gradle uploadArchivesで、このjarファイルがMavenのローカルリポジトリにデプロイされる。

作成したプラグインを使用するためのbuild.gradleは、以下の通り。なお、buildscriptプロパティには、ビルドスクリプト自身の外部依存関係(ex. カスタムプラグインのjarファイル)を記述する。


上記build.gradleからタスクを呼び出した結果は、以下の通り。

>gradle -q greet
Hello
>gradle -q hi
Hi

関連リンク

2012年11月8日木曜日

MavenのSNAPSHOTバージョン

MavenにおけるSNAPSHOTバージョンの意味については、下記を参照。

インクリメンタルサーチを改善するEclipseプラグイン「Glance」

Eclipseはエディタの検索機能が貧弱なので、下記リンクを参考にGlanceというプラグインをインストールしてみました。


エディタだけでなくビューなどでもインクリメンタルサーチが効くのが新鮮です。パッケージ・エクスプローラー・ビューをプロジェクト名で検索すると、ちゃんとそのプロジェクトにジャンプしてくれます。なかなか便利なので、使ってみようと思います。

build.gradleにプラグインを定義する

build.gradle内にGradleのカスタムプラグインを定義する例は以下の通り。(なお、これは例のための例であり、実用性はない点に注意。実際にカスタムプラグインを作成する際の例は『dev-xconnecting: Gradleのカスタムプラグインを作成する』を参照。)


Greetingクラスがプラグインを定義するためのクラス。greetとというタスク名でGreetingTaskを呼び出せるよう設定している(3行目)。

15行目で、作成したプラグインを適用している。文字列ではなく型名でプラグインを指定している点に注意。
上記のタスクを呼び出した結果は、以下の通り。
>gradle -q greet
Hello
>gradle -q hi
Hi

2012年11月7日水曜日

build.gradleにカスタムタスクを定義する

Gradleではbuild.gradle内にカスタムタスクを定義することができる。具体例は、下記の通り。


 カスタムタスクはorg.gradle.api.DefaultTaskを継承したクラスとして定義する。タスク実行時に呼び出される処理は引数なしのメソッド(上記ではgreet()メソッド)として定義し、@TaskActionアノテーションを付与する。カスタムタスクにプロパティ(上記ではgreetigプロパティ)を定義することにより、外部からの情報を受け取ることができる。
上記のタスクを呼び出した結果は、以下の通り。
>gradle -q hello
Hello
>gradle -q hi
Hi

関連リンク

2012年11月6日火曜日

GitHubをMavenリポジトリとして利用する

GitHubをMavenリポジトリとして利用する手順は、下記リンクに詳しい。


手順としては上記リンクに従えば問題ないが、初めは何をやっているのかピンとこなかったので、以下、個人的な要約。

  • Mavenのローカルリポジトリを作成
    • このリポジトリに任意のartifactをuploadする
  • このMavenリポジトリをGitリポジトリとして管理
  • このGitリポジトリをGitHub上の任意のリポジトリにpush
    • gh-pagesブランチにpushするのがポイント
      • Mavenリポジトリとして、いい感じのURLにするため

Twitter for iPadの最新版を使用して感じたこと

Twitter for iPadを最新版にアップデートしました。以前のバージョンではアカウント名がでかでかと表示されるのが気に入らなかったのですが、最新版ではホーム画面にはアカウント名が表示されなくなりました。

ただ、複数アカウントを使用している場合に、アカウントを簡単に切り替える方法がなくなってしまった(ように見えた)ので戸惑ってしまいました。実際には、下記リンクに記述があるように、アカウントのアイコンを長押しすればよいようです。


PCのアプリであれば、メニューバーなどからショートカットを自然に覚えられることが多いのですが、スマートフォンの場合、ショートカット的な手順が用意されていても、それに気づく手段が用意されていません。せっかくの機能もWeb検索しないと見つけられないのが、タッチデバイスの課題のように感じます。

2012年11月5日月曜日

Mac OSXにGradleをインストール

 Homebrewを使用してMac OSXにGradleをインストールする手順は、以下が参考になる。


上記リンクは、実際にはHomebrewを使用してGroovyをインストールする手順だが、Gradleも同様にインストール可能。またHomebrewの導入手順についても、上記リンクからリンクをたどれば、詳細な説明がある。

2012年11月2日金曜日

GradleからMavenリポジトリへのデプロイ

GradleでビルドしたjarファイルをMavenリポジトリにデプロイするには、uploadArchivesタスクを使用する。ローカルのMavenリポジトリにデプロイする例は、以下の通り。

uploadArchivesを使用するには、archivesBaseName, group, versionを指定しておく。archivesBaseNameが明示的に指定されていない場合は、プロジェクト名(build.gradleが含まれるフォルダ名)が使用される。

関連リンク

2012年11月1日木曜日

Gradleで環境ごとに異なる設定を使用する

Gradleでタスクを実行する際に、環境ごと異なる設定を使用したい場合がある。その際、個人的には以下の要件を満たしたい。

  • 使用する環境はコマンドラインから指定したい
  • 各環境に共通の設定は、ひとつのファイルで管理したい
  • 環境によって異なる設定は、環境ごとに別ファイルで管理したい
  • パスワードなどバージョン管理対象外としたい設定は、プロジェクト外のファイルで管理したい

これら要件を満たしたbuild.gradleの記述は、『 Gradle で環境ごとに構成を変更する その2 - bluepapa32’s Java Blog』に詳しい。これを参考に、ディレクトリ構成やファイル名などを自分の好みに変更したbuild.gradleは以下の通り。

基本的には上記リンクのままだが、-Pオプションに存在しない環境を指定した場合、例外を投げてタスクを終了する処理を追加してある。また、“Dynamic properties are deprecated”という警告を消すため、extプロパティを使用している。

 

関連リンク

2012年10月31日水曜日

Gistを行番号つきでBloggerに表示

2012.12.28 追記:いつのまにかGistのスニペット自体に行番号が埋め込まれるようになっていたので、下記の設定は解除しました。

このBlog(Blogger)でもGistに登録したスニペットを埋め込んで表示しているが、デフォルトでは行番号が表示されないのが不便。『satomacoto: Gistで書いたコードを行番号つきでBloggerに埋め込む 』を参考に、行番号を表示するよう修正してみた。実際の表示例は、以下の通り。

手順は上記リンクの通りだが、HTML/Javascriptガジェットの登録方法が分からず、少し悩んだのでメモ。(追記:上記リンク内にも下記手順の画像がありましたが、小さくて見逃していました)

  • Bloggerの管理画面から「レイアウト」を選択
  • レイアウト上の「ガジェットを追加」 をクリック
    • ポップアップウインドウが表示される
  • 「基本」−「HTML/JavaScript」にある「+」をクリック
  • 「HTML/JavaScriptの設定」−「コンテンツ」に<script>タグで囲まれたJavaScriptを記述して「保存」をクリック

上記手順の後に、「レイアウト」画面で「配置を保存」をクリックすると、保存したJavaScriptが反映される。

Gradleで外部依存関係を指定する

Gradleにおける外部依存関係とは、プロジェクトが依存する外部モジュールを指す。例えば、Javaプロジェクトにおいて、ソースのコンパイル時や実行時に必要となるjarファイルがある場合、Javaプロジェクトはこれらのjarファイルと外部依存関係を持つことになる。

Gradleで外部依存関係を指定する方法は、具体的には以下の通り。


上記の例では、dependenciesプロパティ(5行目)で外部依存関係を指定している。compileはjava pluginで定義されているconfigurationでコンパイル時および実行時に必要な外部モジュールを指す。

外部モジュールは、‘group:name:version’という書式で指定する。group, name, versionはそれぞれMavenのgroupId, artifactId, version(これらの詳細は、Maven - Guide to Naming Conventionsを参照)に相当する。

外部依存関係として指定された外部モジュールは、reositoriesプロパティに定義したリポジトリから検索される。リポジトリについては、『dev-xconnecting: GradleでMavenリポジトリを使う』を参照のこと。

関連リンク

  • Gradle本家ユーザガイド
    • Gradle User Guide
      • 7.2.2. External dependenciesから必要(または理解度)に応じてリンクをたどっていくとよい

2012年10月30日火曜日

GradleでカスタムAntタスクを使用する

Gradleでは標準のAntタスクだけでなく、カスタムAntタスクを使用することもできる。具体的には、以下の通り。


configurationsプロパティにconifgurationを独自に定義するのがミソ。ここでは、taskdefという名前のconfigurationを作成している。

dependenciesプロパティにカスタムAntタスクが依存するモジュール(ここではJava2HTML Toolのjava2htmlタスク)を記述する際に、このtaskdefというconfigurationを使用する。

ant.taskdefでカスタムAntタスクを定義する方法は、GroovyでAntBuilderを使用する場合と同じ(というか、AntBuilderそのもの)だが、classpathを指定する際に、conifgurationのasPathプロパティを使用する。

関連リンク

Gradleからantタスクを呼び出す

GroovyではAntBuilderというクラスを使ってAntタスクを呼び出せるが、Gradleではこのクラスをantプロパティとして参照できる。具体的には、以下の通り。
task << hello{
    ant.echo('hello')
}

関連リンク

2012年10月29日月曜日

Gradleからbuild.xmlのAnt targetを呼び出す

Gradleでは、build.xmlに定義されたAntのターゲットをGradleのタスクとして実行できる。

例えば、以下のようなAntのbuild.xmlがあるとする。
<project basedir="." default="hello">
    <target name="hello">
        <echo>hello</echo>
    </target>
</project>
このbuild.xmlをGradleにインポートする。具体的には、build.gradleに以下のように記述する。
ant.importBuild 'build.xml'
これにより、GradleのhelloタスクとしてAntのhelloターゲットを実行することができる。

ただし、build.gradleにhelloタスクがすでに存在する場合、タスク名が衝突してしまう。この場合、以下のようなAntのビルドファイル(ファイル名は任意、ここではwrapper.xmlとする)を用意する。
<project default="">
    <include file="build.xml" as="antwrapper" />
</project>
このビルドファイルをbuild.gradleにインポートする。
ant.importBuild 'wrapper.xml'
これにより、AntのhelloターゲットをGradleのantwrapper.helloタスクとして実行できる。

2012年10月26日金曜日

GradleでMavenリポジトリを使う

GradleでMavenリポジトリを使うには、以下のように記述する。

依存関係の解決にはrepositories内に記述したMavenリポジトリを使用する。複数のリポジトリを記述した場合、上から順に依存関係の解決を試み、最初にモジュール(jar)が見つかったMavenリポジトリを使用する。

なお、モジュールはユーザディレクトリにある.gradleフォルダ内にダウンロードされる。Mavenリポジトリを参照しているからといって、Mavenのローカルリポジトリ(.m2フォルダ)にダウンロードされる訳ではない。また、Mavenのローカルリポジトリから依存関係を解決する場合も、.m2フォルダのモジュールを直接参照はせず、.gradleフォルダにコピーされたモジュールを参照する。

関連リンク

2012年10月24日水曜日

Eclipse + Gradle STS SupportでGroovy用のGradleプロジェクトを作成

Eclipse + Gradle STS Support上でGroovy用のGradleプロジェクトを作成しようとしたが、新規Gradleプロジェクトを作成するウィザードにはGroovy用のプロジェクトを作る機能が存在しない。とりあえずJava用のプロジェクトも作成してみたが、プロジェクト作成に数十秒もかかってしまう上、それを手直ししてGroovy用のプロジェクトにするのもかなり手間がかかる。

あれこれ試行錯誤した結果、当面は以下の手順でGroovy用のGladleプロジェクトを作成することにする。

前提

 

作成手順

Eclipseで新規プロジェクト(一般プロジェクト)を作成し、プロジェクト直下に、以下のbuild.gradleを配置する。(なお、このbuild.gradleは『IT検証ラボ - ビルドツールの移行性、MavenからGradleへの乗り換えは容易か:ITpro』の図33をGroovy用に修正したものです。)


コマンドラインでプロジェクトのディレクトリに移動し、上記のbuild.gradleに定義したmkdirsタスクを実行。
gradle mkdirs
プロジェクトを右クリックし、「Refresh」を選択する。これで先ほど作成したsrcディレクトリがEclipse上で認識される。

最後に、プロジェクトを右クリックし、「Configure」-「Convert to Gradle Project」を選択すると、Groovy用のGladleプロジェクトとして認識される。

2012年10月19日金曜日

Gradleでtask実行時にコンソールからパスワードを取得する

Gradleでtask実行時にコンソールからパスワードを取得する方法は以下の通りです。

console.readPassword()で出力するメッセージが見やすくなるよう、直前で改行しています。なお、実際に使用する際は、取得したパスワードをprintlnしないようご注意ください(笑)。

関連リンク

2012年10月18日木曜日

EclipseでGradle

EclipseでGradleを使うなら、Gradle STS Supportがお勧めです。

GradleにはGroovyのjarが含まれているため、Gradleを動かすだけならGroovyを別途インストールする必要はありません。なお、Groovyでの開発をEclipse上で行う場合は、Groovy-Eclipseもインストールしておくとよいでしょう。

なお、Eclipse上でのGroovy開発環境をこれから構築するのであれば、GGTS (Groovy/Grails Tool Suite)にGradle STS Supportをインストールするのもお勧めです。

Bloggerで小見出し

Bloggerで小見出しをつけるには、h4タグを使えばよい模様。以下、実例。

小見出しの例


上記の小見出しは、h4タグを使用しています。

GradleでのWeb Proxy設定

ビルドのルートディレクトリかGRADLE_HOMEにgradle.propertiesというファイルを作成し、以下のように記述すればよい。
systemProp.http.proxyHost=www.somehost.org
systemProp.http.proxyPort=8080
systemProp.https.proxyHost=www.somehost.org
systemProp.https.proxyPort=8080
httpとhttpsは個別に記述する必要がある点に注意。詳細は、本家マニュアルの Chapter 20. The Build Environmentを参照。

2012年10月17日水曜日

Gradleのインストール

最近、Gradleにハマってます。Gradleのインストールは本家のユーザガイドの通りです。
特にひねったところはありませんが、Mac OSXのunzipフロントエンドの中にはパーミッションが正しく復元できないものがあるので、GNU互換のunzipツールを使うようにとの注意書きがあります。

ちなみに、上記リンクは明示的にver1.2のドキュメントを指しています。最新版のドキュメントは以下から参照できます(現時点では、最新版もver1.2を指しています)。

2012年10月15日月曜日

iEverword 1.2 リリース

Evernoteと連携した単語カードiPhoneアプリ、 iEverword 1.2をリリースしました。本リリースで追加された機能や改善された点などは、以下の通りです。

  •  EvernoteのOAuth認証に対応
  •  表示中の単語に対応するノートブックをEvernoteクライアントで開く機能を追加
    (Evernoteクライアントがインストールされている場合のみ有効)

2012年9月19日水曜日

Groovyで文字エンコーディングを指定してファイル入出力

newReader(), newWriterで()文字エンコーディングを指定して取得したBufferedReader, BufferedWriterを使うのが妥当そう。BufferedWriterは明示的にclose()する必要がある点に注意。

2012年9月1日土曜日

mysqlでバッチ実行

MySQLで、コマンドラインからテキストファイルに記述されたSQL文を実行する方法は、以下の通り。
mysql -u user -p < batch-file
なお、mysqlコマンドの対話モード内から、テキストファイルに記述されたSQL文を実行するには、sourceコマンドを使用する。
mysql> source filename;

2012年7月9日月曜日

Word 2003で編集直後にフリーズ

自宅のPCで、特定のユーザでのみWord 2003がフリーズする現象が発生。具体的には、任意のファイルを開き、編集しようとした直後に必ずフリーズする。

既知のバグのようで、日本語IMEのユーザ辞書が破損している場合におこるとのこと。詳細は、下記リンクを参照。


上記リンクの「解決方法」にあるユーザ辞書の復旧を試みるも復旧中にフリーズ。「回避策」にあるユーザ辞書の再構築を行うことで問題が解消。

2012年6月8日金曜日

Xcodeでworkspaceを使う際のディレクトリ構造

Xcodeでworkspaceを使う場合、Xcode内でのプロジェクトやファイルの配置とは別に、実際のディレクトリ構成を検討する必要がある。また、それとあわせてgitを使う際の指針も必要となる。

ライブラリなど他のプロジェクトから参照されるプロジェクトは、

  • 複数のワークスペースで使われることがある
  • ワークスペースごとにリビジョンが異なる場合がある

ことなどを考慮すると、gitのsubmoduleとして管理するのがよさそう。

これを前提に、ディレクトリ構成とgitの運用指針を以下のように考えてみる。

  • アプリケーションのプロジェクトとライブラリのプロジェクトは個別のgitリポジトリとして管理
  • アプリケーションのプロジェクトフォルダ内にワークスペースを管理するファイル(*.xcworkspace)を配置
    • *.xcworkspaceもgitの管理対象とする
  • アプリケーションのプロジェクトフォルダ内にライブラリのプロジェクトフォルダを配置
    • git submodule addを使う
  • アプリケーションのプロジェクトではライブラリのプロジェクトフォルダをgitのsubmoduleとして管理
    • どのリビジョンのライブラリを使うのかを管理する

Gitのsubmoduleはこれまで使ったことがないので、この方針で運用してしばらく様子をみてみる。

関連リンク

Xcodeでworkspaceを使う

Xcodeで複数プロジェクトをまとめて管理するにはワークペースを使う。ワークスペースを設定する手順は、以下のリンクに簡潔にまとまっている。
設定内容の詳細については、下記リンク(および、そこから辿れるリンク)が詳しい。
なお、ワークスペース内でのプロジェクトの配置は、横並びにも入れ子にもできるが、機能的な違いはなさそう。

 

関連リンク

2012年5月22日火曜日

どうしてiEverwordを作ったのか? (3)

前回のエントリでは、Evernoteに単語を保存することの利点を説明しましたが、いくら単語をたくさん保存しても、復習しないことには意味がありません。私もかつてExcelで単語帳を作ったものの、復習しないまま終わってしまったことがありました。まあ、これは私が怠惰なだけですが。

その反省も込め(笑)、iEverwordでは、Evernoteに保存した単語を可能な限り少ない手間で復習できるようにしています。

具体的な手順を見てみます。iEverwordのインストールは済んでいるものとします。なお、iEverwordの動作には、iOS 5.0以上が必要となります。

iEverwordを起動すると、インストール直後の場合、以下のような画面が表示されます。



このメッセージ通り、「同期」ボタンをタップすると、Evernoteにサインインするための画面が表示されます。



ユーザ名とパスワードを入力してサインインボタンをタップします。Evernoteへのサインインに成功すると、同期したいノートブックを選択する画面が表示されます。



iEverwordは、Evernoteのノートを単語カードとして使用しますが、ノートのタイトルが覚えたい単語(単語カードの表)、本文の1行目がその単語の覚えたい意味(単語カードの裏)に相当します。この形式で作ったノートだけを集めたノートブックをこの画面で選択します。

ノートブックを選択して完了ボタンをタップすると、Evernoteとの同期が始まります。Evernoteのヘビーユーザの場合は、同期に少し時間がかかるかもしれません。なお、同期した後にEvernoteで単語の追加、変更、削除などを行った場合も同様の手順で同期できます。この場合、差分のみを同期しますので、同期にかかる時間は初回より短くなります。

同期が完了すると、先ほど選択したノートブックのみが一覧で表示されます。



これで、単語を復習する準備が整いました。復習したいノートブックをタップして、先頭のカードを表示します。



「次ページ」ボタンをタップすると単語の意味が表示されます。



あとは、「次ページ」ボタンをひたすらタップして、単語を復習します。あるいは、カードをフリップ(カードをめくるように、指を滑らせる)ことでページを移動することも可能です。最後のカードの次には先頭のカードが表示されます。

iEverwordの実質的な機能はこれだけです。「これだけで、本当に単語を覚えられるの?」と思われるかもしれません。そのあたりについては、別のエントリで具体的な使い方をもう少し詳しく書いてみたいと思います。





2012年5月18日金曜日

iEverword 1.1 リリース

Evernoteと連携した単語カードiPhoneアプリ、 iEverword 1.1をリリースしました。本リリースで追加された機能や改善された点などは、以下の通りです。

  •  同期処理の前にノートブックを選択するよう変更
  •  同期時間を短縮
  • ノートをランダムにソートできるオプションを追加
  • 中国語メッセージを追加

なお、このバージョンからiOS 5.0以上が必要となっています。

2012年3月12日月曜日

iPadで不要な言語のキーボードを削除する方法

iPadで他国語の言語環境に切り替えると、その言語のキーボードが自動的に追加されるが、言語環境を戻しても自動的に削除はされない。具体的には、フランス語の言語環境に切り替えるとフランス語のキーボードが追加されるが、言語環境を日本語に戻してもフランス語のキーボードは残ったままになる。

このため、i18nのテストなどで言語環境を切り替えてテストしていると、テストした言語すべてのキーボードが残ってしまし、通常のキーボード入力時の言語の切り替えがかなり面倒になる。

不要なキーボードを削除するには、「設定」−「一般」−「キーボード」−「各国のキーボード」を選択後、画面右上の編集ボタンをタップし、削除したいキーボードの左側にある赤いマーク(進入禁止のようなマーク)をタップすることで削除可能になる。

上記の「画面右上の編集ボタン」に気がつかず、どうやって削除するのか悩んでいたが、下記リンクを読んでやっと気づいた次第。

2012年3月9日金曜日

AtermWM3500Rで接続が途切れる問題への対処

WiMAXルータとしてAtermWM3500Rを日常的に使用しているのですが、一定時間(30分程度)経つと接続が途切れることがたびたびありました。どうも既知の問題のようなので、以下のように対処してみました。

まずは、ファームウェアを最新にアップデートします。

現時点での最新ファームウェアはver4.0.0です。ちなみにアップデート前はver1.1.0でした。(買った時以来、更新していませんでした・・・)

さらに、下記リンクを参考に設定を変更しました。

具体的には、以下のように設定しました。
  • 【送信出力】を100%に
  • 【無線優先制御機能】をOFFに

下記リンクによると送信出力を100%にしても、バッテーリーの持ちに特に問題は起きないようです。実際使ってみても、特に問題は感じません。

無線優先制御機能をOFFにするとIEEE802.11nによる接続がオフになるようです(上記の公式サイトに記述があります)。

上記対応後に数日間使用してみましたが、電波の状態に問題がないと思われる状況で接続が途切れる問題は発生していません。また、電車での移動中などに接続が途切れた時の再接続も速くなったように思います。

なお、複数台の子機を同時に使用した際に無線LAN通信ができなくなる場合もあるようですが、この問題については過去のファームウェアバージョンアップで修正済みのようです。

2012年3月8日木曜日

2012年3月6日火曜日

最低限覚えておくべきviのコマンド

日常的にはvi(vim)を使用していませんが、サーバの設定ファイル編集など、どうしてもviを使う必要があることがあるので、下記リンクと個人的経験をもとに最低限必要と思われるコマンドを整理してメモしておきます。
なお、(オプション)は、必須ではないですが覚えておくと便利なコマンドです 。
  • 起動
    • vi <ファイル名>
      • 指定したファイルを開く
    • view <ファイル名>
      • 指定したファイルを読み取り専用で開く
    • vi -R
      • viewと同義(viewが使えない時のために)
  • コマンド・モードと挿入モードの切り替え
    • i
      • コマンド・モードから挿入モードに(カーソル位置に挿入)
    • a
      • コマンド・モードから挿入モードに(カーソル位置の後ろに挿入)
    • esc
      • 挿入モードからコマンド・モードに
  • カーソル移動(コマンドモード時)
    • h,j,k,l
      • カーソル移動(←↑↓→)
    • 0 (アルファベットのOではなく数字の0です)
      • 行頭に移動(オプション)
    • $
      • 行末に移動(オプション)
  • ページ移動(コマンドモード時)
    • 行数が多いファイルでは、カーソル移動だけでは不便です
    • Ctrl+f
      • Page Down
    • Ctrl+b
      • Page Up
  • 検索(コマンドモード時)
    • 行数の多い設定ファイルなどで、検索できると重宝します
    • /
      • 検索文字指定
    • n
      • 前方検索
    • N
      • 後方検索
  • テキスト編集(コマンドモード時)
    • x
      • 1文字削除
    • dd
      • 1行削除(カット)
    • yy
      • 1行コピー
    • p
      • ペースト(行をペーストする場合、カーソルの1行下にペーストされる)
    • u
      • Undo
  • ファイルの保存
    • :w
      • 保存
    • :w!
      • 読み取り専用で開いたファイルを強制保存(パーミッションは必要)
  • 終了
    • :q
      • 終了(変更を保存していない場合は警告)
    • :q!
      • 終了(変更を保存していない場合は破棄して終了)
  • 保存して終了(オプション)
    • :wq
      • 保存して終了
    • :wq!
      • 保存して終了(読み取り専用で開いたファイルも強制保存)

2012年3月3日土曜日

Mac OSXにgit-completionを導入

下記リンクをもとに、Mac OSXにgit-completionを導入しました。
まずは、下記からgit-completion.bashをダウンロードします。
git-completion.bashをファイルとしてダウンロードするにはどうしたらよいか迷いましたが、ソース1行目の右上のほうにあるRawボタンを右クリックして「名前を付けてリンク先を保存」すればいいようです。

ダウンロードしたgit-completion.bashをホームディレクトリに配置し、.bachrcに以下を追記します。なお、OSX (Snow Leopard)のデフォルト設定では、.bashrcは存在しないようなので、新たに作成しました。
if [ -f ~/git-completion.bash ] ; then
source ~/git-completion.bash
PS1="\h@\u:\W\$(__git_ps1) \$ "
fi
PS1を上記のように設定することで、gitリポジトリ内のディレクトリに移動した際に、プロンプトにブランチ名が表示されるようになります(実は、これが今回の主な目的だったりします。
sourceコマンドで.bashrcの設定を反映します。
source .bashrc
これで、git-completionが有効になります。なお、Snow Leopardのデフォルト設定では、Terminal.app起動時に.bashrcが読み込まれないので、.bash_profileに以下を追記しました。
if [ -f ~/.bashrc ] ; then
source ~/.bashrc
fi
.bash_profileを書き換える以外に、source ~/.bashrcをTerminal.appの環境設定に設定する方法もあるようです。詳細は下記リンクを参照。

2012年2月28日火曜日

EclipseをSolarized

下記リンク経由で、Solarizedという汎用的なカラーテーマ?があることを知りました。
CUIやGUIで使うことを意図した、目に優しい配色パターンとのことです。早速、Eclipseで試してみました。

まずは、Eclipse Color ThemesというEclipseプラグインをインストールします。次に、Eclipse Color Themes用のSolarizedテーマ(XMLファイル)をダウンロードします。私は、Solarized Lightから「Eclipse Color Theme (XML)」をクリックしてダウンロードしました。

あとは、「Preferences」の「General」-「Appearance」-「Color Theme」から「Import a theme」ボタンで、ダウンロードしたxmlファイルをインポートし、「Theme」から「Solarized Light」を選択すればOKです。

テーマはソースコードだけでなく、テキストファイルやxmlファイルなど、かなり広範囲に適用されるようです(コンソールには適用されませんでしたが)。個人的には少し文字が薄いように感じますが、なかなか良さそうなので、しばらくこの配色で使ってみようと思います。

2012年2月23日木曜日

MediaWiki記法の外部リンクを取得するブックマークレット

下記リンクを参考に、見よう見まねでMediaWiki記法の外部リンクを取得するブックマークレットを作ってみました。
整形前のソースコードは、以下の通り。
  • (2012.03.09 更新) タイトルに改行が含まれている場合は、改行を除去するよう修正しました。
  • (2012.10.17 更新) Google CDNのjQueryを使用するよう変更しました。
var s = document.createElement('script');
s.setAttribute('src', 'http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js');
document.getElementsByTagName('body')[0].appendChild(s);
var id = window.setInterval(function() {
  if (window['jQuery'] && window['jQuery']['fn']
      && window['jQuery']['fn']['offset']) {
    window.clearInterval(id);
    prompt("Copy the text below.", '[' + document.URL + " " +$('title').text().replace(/[\r\n]/g,"") + "]");
  }
}, 100);
最初、画面へのフィードバックにはalertを使っていたのですが、以下を見てpromptに変更しました。
なお、jQueryを無理やり読み込んでいるので、jQueryをもともと使用しているサイトでは、このブックマークレット実行後に問題が発生するかもしれません。

2012年2月20日月曜日

Excelでセル参照の方法を切り替えるショートカット

Excelでセル参照の方法を切り替えるには、F4キーを使用するのが便利。
具体的には、「=B1」という式が設定されたセルがある場合、そのセルを選択し、「B1」の文字列を選択した状態でF4キーを押すと、「$B$1」、「B$1」、「$B1」、「B1」と順番に式が切り替わる。

2012年2月16日木曜日

Bloggerをスマートフォンで表示した時に画面の拡大縮小を許可する方法

このブログをiPadで見た時に画面の拡大縮小ができないのがかなりストレスだったので、拡大縮小が可能なよう設定を変更。Bloggerの新インターフェースでの手順は以下の通り。

「マイブログ」で、編集対象のブログを表示し、「テンプレート」−「HTMLの編集」を選択。

「直接 HTML を編集すると、一部の機能の動作に影響する・・・」うんぬんという画面が表示されるので、「続行」ボタンを押す。

<meta content='width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0' name='viewport'/>

上記のように、viewportのminimum-scaleとmaximum-scaleが1.0に固定されているのが原因。下記のように修正する。

<meta content='width=device-width,initial-scale=1.0' name='viewport'/>
これで、iPadでも画面の拡大縮小が可能になる。ちなみに、Bloggerの新インターフェースは以前より統一感があり使いやすくなったと思う。

2012年1月23日月曜日

PowerPointのスライドをJPEGに変換する方法

PowerPointで作成した図形を、サイズや色を保持してJPEGなどのビットマップに変換するには、スライドを画像に変換するとよさそう。具体的な手順は、下記参照。

2012年1月13日金曜日

Bloggerへの投稿をTwitterfeed経由でTwitterにツイート

このブログはBloggerを使っていますが、ブログへの投稿を自動的にTwitterにツイートするためにTwitterfeedを使ってみました。特に問題なさそうなので、このまま使ってみようと思います。

なお、Bloggerユーザなら、Twitterfeedのアカウントを新たに取得する必要はなく、OpenIDを使ってBloggerのアカウントでTwitterfeedにログインできます。Twitterfeedのアカウント取得や設定方法に関しては、以下のリンクが詳しいです。

2012年1月12日木曜日

どうしてiEverwordを作ったのか?(番外編)

前回のエントリでEvernoteに保存した単語を復習できるiPhoneアプリが欲しかったと書きましたが、私が知る限り、これまでそのようなアプリはリリースされていませんでした。ということでiEverwordを作った訳ですが、iEverwordのリリースと同じ日に、Everwordというアプリがリリースされていました。
名前がそっくりなだけでなく(笑)、Evernoteを暗記カードのストレージに使うというコンセプトもiEverwordに似ています。iEverwordとの主な違いは、Evernoteのノート全文を表示できること、正解、不正解をタグとして記録できるなど。私がいうのもなんですが、なかなかの優れものです。ざっと試した限り、iEverwordで使っているノートブックをEverwordで使っても不都合はありませんでした。

もし、Everwordがもっと前にリリースされていれば、iEverwordは作らなかったかもしれません。少なくともiEverwordという名前ではリリースしなかったと思います(笑)。ただ、iPhoneアプリを開発した経験のある方ならご存知かと思いますが、アプリの名前を変更するとなると結構手間なので、同じ日にiEverwordをリリースできたのは幸運だったかもしれません。

EGitでローカルのtagをリモートにpushする方法

基本的には、下記リンクの記述どおり。
運用としては、ローカルにあるすべてのtagではなく特定のtagのみpushするのがよさそう。

2012年1月11日水曜日

iEverword初ダウンロード!

1/9付けでiEverwordをダウンロードして下さった方がいらっしゃるようです。これまで、プロモーションコードでのダウンロードはありましたが、有料でご購入頂いたのは初めてです。素直に嬉しいです。どなたか分かりませんが(当たり前ですが)、ダウンロードありがとうございます。

2012年1月5日木曜日

iEverword - "Flashcard apps"に掲載

iOSで動作するFlashcardアプリを紹介するサイト、Flashcard apps(英語)にiEverwordが掲載されました。
Flashcardと言われてもピンとこないかもしれませんが、Flashcard appsのAboutによると、以下のように定義されています。

  • 複数のスタック(言語、科目など)から学習したいものを選択できること
  • 自分のスタックを作成またはインポートできること
  • 質問を表示した後に答えを表示するという方法で学習できること

スタックというのもイメージしづらいかもしれませんが、ひとつのリングで束ねられた単語カードがひとつのスタックに相当すると考えればよいかと思います。

現時点で、137ものFlashcaradアプリが紹介されていますので、iOSで動作する単語帳アプリに興味のあるかたはご覧になってみてはいかがでしょうか。