LoginSignup
0

More than 5 years have passed since last update.

OpalでElectronのアプリをつくる(その3)

Posted at

この記事はOpal Advent Calendar 2016の16日目の投稿として書いています。

昨日の続きで、electron_opalをOpal v0.10.3で動かしてみましょう。

まずは、Opalのバージョンをそのまま上げて動くでしょうか?
cloneしてきたソースコードのelectron_opal.gemspecをOpalのバージョンを変更します。

electron_opal.gemspec
  s.add_dependency "opal", "~> 0.10.0"

bundleコマンドでアップデートします。

$ bundle update

opalのバージョンが0.10.3になりました。
ビルドしてみましょう。

$ bundle exec rake build
rake aborted!
can't modify frozen Array

いきなり失敗しました。Opal.pathesがfrozenに変更になったのでしょう。
21行目を

lib/electron_opal.rb
  @config.paths = Array.new(Opal.paths)

と書きかえます。

つぎは、load_asset_codeというメソッドがないと言われます。

14日目の記事の書いたとおり、Opal::Builder.buildを使います。
Opal::Builder.buildでコンパイルされたコードはロードするとそのまま実行されますが、
元のコードではOpal::Processor.load_asset_codeenv.find_assetに分かれていて、コンパイルされたコードとそれを呼び出すコードとに分けています。

67行目のcompile_jsは次のように書きかえます。

lib/electron_opal#L67
def compile_js(asset_name, options={})
  load_asset_code = Opal::Builder.build(asset_name)
  write_to("#{asset_name}.js", load_asset_code)
end

106行目は削除しましょう。

lib/electron_opal#L106
      scripts << %{<script>#{Opal::Processor.load_asset_code(@env, @name)}</script>}

これだけでは、buildするとファイルがみつからないと言われます。
33行目、setup_envを以下のように書きかえます。

electron_opal#L33
def setup_env
  config.paths.flatten.each { |p| Opal.append_path(p) }
end

51行目はPathnameのままだとだめみたいなので、to_sを呼んでStringにしておきます。

electron_opal#L51
    asset_name = Pathname.new(file_path).basename(".rb").to_s
$ bundle exec rake build
$ bundle exec rake

ちゃんと動きましたでしょうか?

これで一応、OpalでElectronアプリが動きました。
今回の修正はelectron_opalにPRしようかと思ったのですが、大分メンテナンスされていないようだし、実はElectronのライブラリのラッパーも持っているのですが、わたしが書いたようなNativeを使う方法ではなく独自のやりかたをしています。
electron_opalをメンテナンスしていくよりは、別に新しいものを作ったほうがよさそうだと思ったのでPRはしませんでした。
ある程度まとまったものが出来たら、また発表しようと思います。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0