Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
4
Help us understand the problem. What is going on with this article?
@Masutani

R tools for Visual StudioでRライブラリ開発

More than 3 years have passed since last update.

RTVSには、まだライブラリ開発支援機能は無いのですが、以下のように{devtools}パッケージと併用すれば、非常に簡単に開発、コミットできます。

こわくないRパッケージ開発!2016

Visual StudioでのRライブラリ開発

これは、以前もTokyo.Rで紹介した記事などを見てもらえるとよいですが、Visual Studio でライブラリ開発となると、どうでしょうか?
少なくとも以下を満たすようにしたいと思います。

  • devtoolsでのRライブラリのフォルダ構成と、Visual Studioプロジェクトを併存させる。
  • 当該Rライブラリは、githubの管理とするが、このライブラリを利用する側のソリューションは、デバッグ等も考えて、直接このライブラリのVSプロジェクトを参照する。
  • ただし、利用する側のソリューションは別のtfsやgitリポジトリ管理とする。
  • そうすると、Rライブラリ側でこれによるソースの2重管理をしなくて良いようにする。

手順

githubでプロジェクト作成

プロジェクト名はライブラリ名となりますので、Rのライブラリにふさわしい名前にしましょう。今回は以下のようにしました。

image.png

適当なリポジトリフォルダにcloneします。
私は、ここで、Visual Studio からcloneし、通常のVSTSと同じ場所にフォルダを並べました。これで既存のVSTSソリューションからの参照もスムーズです。(フォルダが近いという意味だけですが)

image.png

上図のように、チームエクスプローラーの接続パネルからあらかじめ接続しておいたgithubアカウントにある当該プロジェクトを選びCloneとするだけです。Cloneすると以下のような選択画面から選べます。

image.png

devtoolsでフォルダを作成

devtools::setup()などで、上記のcloneしたフォルダにフォルダ構成を作成します。

上記ページにありますように、以下のような構成の状態になります。Cのコードをコンパイルするようなライブラリでなければ、シンプルです。

  • R/
  • DESCRIPTION
  • NAMESPACE
  • example.Rproj
  • .Rbuildignore
  • .gitignore

Visual StudioのRプロジェクト、ソリューションファイルを移設

まず空のRプロジェクトを作成します。

image.png

この時、ソリューションフォルダを作成しない設定にしておきます。これでslnファイルとprojファイルが同じフォルダになり、無駄な階層がなくなります。gitリポジトリはもう作ってあるので、再度作らないようにします。
これで、

  • ソリューションファイル
  • プロジェクトファイル

image.png

が出来ますが、これらを先ほどのdevtoolsで作成したRプロジェクトの空フォルダに移設します。
ここでは、以下のファイルだけを移動しました。

  • [プロジェクト名].rxproj
  • [プロジェクト名].rxproj.user
  • [プロジェクト名].rxproj.sln

この場合、ソリューションファイルにもプロジェクトファイルにもまだ何も記載がないのでこれでOKだそうです。パスはすべて相対パスかエイリアスが使われているので、中身を改変する必要はありません。

Visual Studio から開く

ここで、slnファイルをダブルクリックして、VSから開いてみます。
Rプロジェクトの場合は、プロジェクトファイルでソースを管理しておらず、フォルダ階層にあるファイルがすべて見えますので、このまま通常のRプロジェクトとして使えるようになります。これが驚き。

image.png

上記のようなプロジェクト構成ができあがっているはずです。
gitのファイルはgithubでクローンしたときのもの、slnはVisual Studioのものその他はdevtoolsで作成したものです。

開発する

プロジェクトファイルにRファイルをどんどん追加して、roxgenコメントなどを書いていけば、公開できるライブラリが完成です。
Cのマクロのような情報などが若干必要ですが、おおむね必要最小限で良いです。

コミットする

githubでcloneしたのはVisual Studioでしたし、プロジェクトファイルもソリューションファイルもgithubから見たら、ただのテキストファイルなので、そのままVisual Studioを使ってコミット、PUSHしましょう。こちらは、いつも通り、チームエクスプローラーのGUIを使いましょう。Rライブラリだからとか、どうとか何も考える必要はありません。

image.png

なんだかこの時点で、Visual Studioの支援機構でライブラリ開発した気分になってしまいますね。

サンプル

サンプルとしてbnlearnをmlr用にラップしたライブラリをコミットしてみました:
mlrbn @ github

rxproj ファイルなどがちゃんと入っており、Visual Studio(RTVS)使いにはVSプロジェクトとしてみえ、RStudio使いにはRprojとして見えるライブラリになっています。たぶん。

別の親ソリューションからプロジェクトを参照し、使うことが可能です。例えば、internal用と、external用のソースコードを相互に編集しながら開発できます。

課題

なかなかいい感じにできたのですが、以下の課題があります。

  • 参照元の外部ソリューションからライブラリのソースコードを編集しても、そのソリューションからはコミットできない。

これは、当然ですし、Visual Studioが一つのソリューションで2つのコミット先を使い分けできない仕様である限り、どのみち対応は難しいでしょう。ただし、以前トライしたVSTSへコミットした後、透過的にgithubへコミットする方法なら可能化もしれません。

  • ライブラリのソリューション側でソースコードを改変した場合、その変更は外部ソリューションには伝わらない。

これも当たり前ですし、Rの場合コンパイルはないので、ほとんど影響ないでしょう。

  • コミットのタイミングを同期できない

Visual Studioが二つのリポジトリに同期して同じコミットをするような機能が導入されない限りは無理でしょう。
そもそもライブラリにした時点で、管理は別でやるべきなので、これは期待してはいけないのかもしれません。

4
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Masutani
データサイエンティストをしています。地理空間情報系の処理を主に扱っています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
4
Help us understand the problem. What is going on with this article?