妄想プログラマのらくがき帳 : 6月 2014

2014年6月29日日曜日

[Tips]Grep置換

こんな方法でもGrep置換できるよーっていうTipsです。
まー大抵の場合エディタの機能を使ったり、linuxならコマンドで出来ちゃうのであまり使うことが無いかもですが、客先のPCにGrep置換できるエディタが入ってない!とかいった場合に使えるかもしれないので知っておいて損は無いかと。

方法は簡単、VisualStudioの置換を使います。
(エディタが入ってないのにVisualStudioが入ってるなんてありえるの?と思う人もいるかもしれませんが、そんな不思議があり得るんですよねー、仕事だと('A`))

VisualStudioでCtrl+Shift+Fを押すとフォルダを指定しての検索と置換ダイアログが出てくるので、置換タブを選択し、検索対象にGrep置換をしたいフォルダのパスをコピペして置換をするだけです。
「置換後に、変更したファイルを閉じない」にチェックを入れておけばCtrl+Zで元に戻すことも出来ます。

2014年6月22日日曜日

[Roslyn]とりあえず使ってみる

最初の発表からずいぶん目立った動きの無かったRoslynですが、最近になって動きが活発になってきました。なので、そんな流れに合わせて少しの間Roslynネタで記事を書こうと思います。

Roslynとは?

コンパイルの過程やコンパイラが持っている情報をAPIとして提供するコンパイラプラットフォームです。Roslynを使えば、C#のソースコードをパースしたり、メソッドや変数やの情報を取得できたりします。

つい最近公開されたVisualStudio14 CTPでRoslynが使用されていることからも、今後Roslynが.NETの中核になっていくのではないかと思います。要注目ですね!

※ちなみにRoslynはオープンソースとしてCodePlexで公開されています。

最近のMicrosoftはオープンで良いですねd(*´∀`*)

使ってみよう

早速Roslynを使ってみましょう。まずはNuGetでRoslynのパッケージをインストールします。VisualStudioのメニューから[プロジェクト]‐[NuGet パッケージの管理]を選択すると下記のダイアログが開きます。


左側の項目で「オンライン」を選択し、
1. 上部のコンボボックスで「リリース前のパッケージを含める」を選択
2. 右上にある検索ボックスに「Microsoft.CodeAnalysis」を入力
とすると、一番上に「Microsoft.CodeAnalysis」が出てくるので、これをインストールします。

インストールが終わった後にプロジェクトの参照設定を見ると、Microsoft.CodeAnalysis関係の項目が追加されています。

これでRoslynを使う準備は完了です。

C#のソースコードをパースしてみる

準備が出来たら実際にソースコードをパースしてみましょう。以下のコードがソースコードをパースするコードです(...と言ってもパースしてるのはMainの中の1行だけですけど(^_^;))。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
// usingは以下の2つを追加
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;

namespace RoslynSample
{
    class Program
    {
        // パース対象のコード
        private static string m_sourceCode =
@"using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace RoslynSample
{
    class Program
    {
        /// 
        /// エントリポイントです。
        /// 
        /// コマンドライン引数        static void Main(string[] args)
        {
            System.Console.WriteLine(""Hello Roslyn!"");
        }
    }
}";
        static void Main(string[] args)
        {
            // ParseText()にパース対象のコードを渡せば、コードの構文木を作成できる。
            // コードをファイルで指定する場合はParseFile()を使用する。
            SyntaxTree tree = CSharpSyntaxTree.ParseText(m_sourceCode);
        }
    }
}

パースしたいソースコードをCSharpSyntaxTree.ParseText()に渡すだけです。
ParseText()の戻り値のSyntaxTreeは、ソースコードの構文を表した木構造になっていて、SyntaxTreeのノードであるSyntaxNodeにメソッドや変数の情報が格納されています。

次回はこのSyntaxTreeの中身を探ってみます。

2014年6月17日火曜日

再開準備中…

ずいぶんサボってましたが、ただいま再開準備中です(^∀^;)ゞ
サボってた間はC#でRoslynいじって遊んでました。なので、再開後はRoslynの記事が続く予定です。
Android開発はもうすぐスマホを買い換えるのでそれから再開する予定。
とりあえず今週末には1回更新します。