iPadでJavaScriptを書いてすぐ実行するやつ作った

iPadでプログラムが書きたい。

ってことで、iPad上でJavaScriptを書いてすぐ実行するやつを作った。といってもAppStoreで配信するアプリではなく、htmlとcssJavaScriptで書いた単純なWebページなので、SafariでURLを開くだけでいい。

JavaScripadって安易な名前だからすでに誰か使ってるかと思ったけど、まだ無さそうだった。

2010-7-19 追記

tabインデントに関する機能を追加した。

  • 改行で自動インデント
  • tabボタンの右フリックでtab文字を入力
  • 範囲選択してtabボタンを左右にフリックすると、複数行まとめてtabインデントの移動

追記ここまで。

2010-6-11 追記

カーソル移動や記号の入力につかうボタンを、フリックで入力するようにした。これによってボタンが大きく押しやすくなったのと、連打して文字選択モードになってしまう問題が回避できた。

あと、詳しい説明を余白(キーボードが出るはずの場所)に書いた。

以下の説明やスクリーンショットは古いバージョンのものなので、最新の説明は実際の画面を見て欲しい。

追記ここまで。

使い方


  1. iPadSafarihttp://nacookan.com/2010/js.html にアクセス。
  2. iPadを縦に持っている場合は上、横に持っている場合は左の入力欄にjsでコードを書く。
  3. 文字列を出力したい場合は、print(string) 関数があるので、それを使う。
  4. jQueryもロードしているので、使っていいよ。
  5. コードを入力すると、反対側の欄に実行結果が出力される。
  6. カーソルキーとよく使う記号は、ボタンを並べておいたのでそれを使うとちょっと便利かも。≪は行頭。←はひとつ左。→はひとつ右。≫は行末。あとは記号。

仕組み

keyupイベントをつかまえて、evalしてるだけ。htmlファイル内にすべてのコードが書いてあって、サーバーサイドでは何もやっていないので、詳しくはソースコードを見て欲しい。

縦と横

iPadを縦に持った場合と横に持った場合でcssを切り替えている。

以下の記事が激しく参考になった。そのままだった。

カーソルキーと記号

iPadのキーボードは意外と打ちやすいんだけど、文章を書くのは良くてもプログラムを書くのにはちょっと厳しい。カーソルキーは無いし、記号は入力しづらいから。

そこで画面に専用のボタンを置いた。最初はclickイベントをハンドルして処理を書いていたけど、これだと一瞬iPadのキーボードが消えてまた出てくるという挙動になってしまい、実用上問題はないけど気になる感じだった。

それでいろんなイベントを試したところ、iPadSafariでは "touchstart" というイベントが発生することがわかり、これをハンドルしてもキーボードが消えないこともわかったので、解決した。

ちなみにjQueryでclickみたいにメソッド化されてないイベントのハンドルにはbindメソッドを使う。

カーソルキーに関しては、ホントは上下移動も作りたかったけど、いろいろ難しくてやってない。誰か助けて。

あと、このボタンを連打すると、ダブルタップとして認識されてしまい、文字選択モードになってしまう問題があって悩んでる。とりあえず、あんまり速く連打しないで欲しい。でもカーソルキーとか++とか、ついつい連打しちゃうんだけどね。。。

Sendai.jsで使った

6月8日はSendai.jsの4回目だった。普通はノートPCを持っていってFirebugとかでコードを打って結果を見たりするんだけど、自分は全部このJavaScripadだけでやってみた。その結果、とりあえず大丈夫だった。念のためMacBookも持っていったけど使わなかった。

まだ記法をみんなで確認してる段階ってだけで、何かを作ったりしたわけじゃないからっていうことだと思うけど。

ただ、6月8日時点ではまだカーソルキーの機能が無くて、そこだけ苦労した。さっき作ったので今後は大丈夫。

オフライン動作

iPadWi-Fiモデルの人もいるからオフラインで動作させたいんだけど、どうやればいいんだろう。画面さえ読み込めれば、その後は通信不要なのでいけるはず。

ただ、たとえばhtmlをメールに添付して送ったり、GoodReaderで開いたりしてみたら、画面をタップするとツールバーとかが画面に重なってしまって使い物にならない。困った。あとjQueryGoogleからロードしてるのでオフラインだとたぶんダメ。ああなんかいいアイディアないかな。

今後やりたいこと

  • 書いたコードを保存できるようにするとか(しかもパーマリンク付けて公開?)
  • id:dankogaillevalを使うなどして他の言語も実行できるようにするとか
  • もうちょっと画面の見やすさ、入力のしやすさを追究するとか