A Day In The Boy's Life -71ページ目

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

Google code上にCSSをホストしてそれを参照しようとしたら、ロードはされているみたいなんだけどうまくCSSがあたらないという現象が発生しました。

ググってみたら、


Freely Host CSS, JS & other static files using Google Code and SubVersion @ InTechgrity


Google code側の問題ではなく、Subversionの問題なのね・・・。



SubversionでCSSのmime-typeを正しく認識させる


ってことで、SubversionにCSSファイルを正しいMIMEタイプであるtext/cssと認識させてみる。


svn propset svn:mime-type text/css *.css

上記のようにpropsetオプションをつけて正しいMIMEタイプを指定すればいいだけ。

実行後は、Google code上のリポジトリにコミットしてあげる。


svn commit -m "Comment" --username YourID --password YourPassword

ちなみに、先のサイトで紹介されているように~/.subversion/configを編集する方法でも問題ないみたいです。

こちらは、MIMEタイプを自動認識してくれるので、継続的に作業したい場合や複数の拡張子に対して適切なMIMEを設定したい場合は便利ですね。


また、CSS以外の画像やプログラムファイルが正しく認識されないって場合も同様にMIMEタイプの変更で回避できるかもしれません。




エンジニア系のブログではよく見るSyntaxHighlighter をアメブロでも使えないか試してみました。

ソースコードとかをブログで見せたいときに、関数や言語の予約語とかがマークアップされて綺麗に表示してくれます。


なお、ここではアメブロのフリープラグインに直接SyntaxHighlighterのコードを埋め込む方法と、以前に「AmebloのフリープラグインのJavaScriptをGoogle codeにホストしたよ 」に書いたGoogle code上にホストする2種類の方法を試してみました。

また、SyntaxHighlighterのJavaScriptファイルなどをアメブロ内にアップロードすることはできないので、何れもホスティングバージョン (無料)を使っています。(後半のほうはホストのホストになりますけど・・・)



SyntaxHighlighterをフリープラグインに埋め込む


まずは、直接フリープラグインに埋め込む方法。

これは、下記のようにホスティング(Amazon S3)されているSyntaxHighlighterのJSやCSSファイルを読み込むことで実現できます。


<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shAutoloader.js" type="text/javascript"></script>
<script>
$(document).ready(function() {
  $("head").append('<link rel="stylesheet" href="http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css" type="text/css" />');
  $("head").append('<link rel="stylesheet" href="http://alexgorbatchev.com/pub/sh/current/styles/shCore.css" type="text/css" />');

  function path() {
    var args = arguments,
    result = [];

    for(var i = 0; i < args.length; i++)
      result.push(args[i].replace('@', 'http://alexgorbatchev.com/pub/sh/current/scripts/'));

    return result
  }

  SyntaxHighlighter.autoloader.apply(null, path(
    'applescript            @shBrushAppleScript.js',
    'actionscript3 as3      @shBrushAS3.js',
    'bash shell             @shBrushBash.js',
    'coldfusion cf          @shBrushColdFusion.js',
    'cpp c                  @shBrushCpp.js',
    'c# c-sharp csharp      @shBrushCSharp.js',
    'css                    @shBrushCss.js',
    'delphi pascal          @shBrushDelphi.js',
    'diff patch pas         @shBrushDiff.js',
    'erl erlang             @shBrushErlang.js',
    'groovy                 @shBrushGroovy.js',
    'java                   @shBrushJava.js',
    'jfx javafx             @shBrushJavaFX.js',
    'js jscript javascript  @shBrushJScript.js',
    'perl pl                @shBrushPerl.js',
    'php                    @shBrushPhp.js',
    'text plain             @shBrushPlain.js',
    'py python              @shBrushPython.js',
    'ruby rails ror rb      @shBrushRuby.js',
    'sass scss              @shBrushSass.js',
    'scala                  @shBrushScala.js',
    'sql                    @shBrushSql.js',
    'xml xhtml xslt html    @shBrushXml.js'
  ));
  SyntaxHighlighter.all();

});
</script>

コアとなるJavaScriptファイルを読み込んだあとで、jQueryでCSSのロードと言語ごとに必要なJavaScriptファイルをオートロードし、変換するような流れです。

ただし、かなり長いコードなのでフリープラグインの制限(3800文字)にすぐに引っかかってしまうかもしれません。



Google code上にホストしたJavaScriptからSyntaxHighlighterを利用する


この方法は、アメブロに限った話ではなく、他のブログでも同様にJavaScriptをブログ内に直接設置できないという場合の回避策になるかもしれません。
Google codeへのホスト方法は「AmebloのフリープラグインのJavaScriptをGoogle codeにホストしたよ 」を参考にしてみてください。


<script>
$(document).ready(function() {
  $("head").append('<link rel="stylesheet" href="http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css" type="text/css" />');
  $("head").append('<link rel="stylesheet" href="http://alexgorbatchev.com/pub/sh/current/styles/shCore.css" type="text/css" />');

  $.getScript("http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js", function() {
    $.getScript("http://alexgorbatchev.com/pub/sh/current/scripts/shAutoloader.js", function() {

      function path() {
        var args = arguments,
        result = [];

        for(var i = 0; i < args.length; i++)
          result.push(args[i].replace('@', 'http://alexgorbatchev.com/pub/sh/current/scripts/'));

        return result
      };
      SyntaxHighlighter.autoloader.apply(null, path(
        'applescript            @shBrushAppleScript.js',
        'actionscript3 as3      @shBrushAS3.js',
        'bash shell             @shBrushBash.js',
        'coldfusion cf          @shBrushColdFusion.js',
        'cpp c                  @shBrushCpp.js',
        'c# c-sharp csharp      @shBrushCSharp.js',
        'css                    @shBrushCss.js',
        'delphi pascal          @shBrushDelphi.js',
        'diff patch pas         @shBrushDiff.js',
        'erl erlang             @shBrushErlang.js',
        'groovy                 @shBrushGroovy.js',
        'java                   @shBrushJava.js',
        'jfx javafx             @shBrushJavaFX.js',
        'js jscript javascript  @shBrushJScript.js',
        'perl pl                @shBrushPerl.js',
        'php                    @shBrushPhp.js',
        'text plain             @shBrushPlain.js',
        'py python              @shBrushPython.js',
        'ruby rails ror rb      @shBrushRuby.js',
        'sass scss              @shBrushSass.js',
        'scala                  @shBrushScala.js',
        'sql                    @shBrushSql.js',
        'xml xhtml xslt html    @shBrushXml.js'
      ));
      SyntaxHighlighter.all();
    });
  });
});
</script>

2011.10.17追記

上記のJavaScriptコードに構文エラーがあったため、修正しました。


こちらは、全てjQueryにて実装しています。
$.getScript()を並列に並べてshCore.jsとshAutoloader.jsを読み込んだらFireFoxではうまく動いたんですがIEだと動作しませんでした。

なので、最初の$.getScript()のコールバックとして$.getScript()を呼び出し、さらにそのコールバックでSyntaxHighlighterの実行をさせています。



SyntaxHighlighterの使い方


preタグもしくはscriptタグでソースを囲むことでコードを整形することができます。

ただし、アメブロはscriptタグが記事内で利用できないのでpreタグを利用するしかありません。


下記のようにclass指定することでその言語にあったマークアップをすることができます。


<pre class="brush: js toolbar: false;" title="コードのタイトル">


brush:」のあとに記述するクラス名の指定にてshAutoloader.jsが適切な言語のJavaScriptファイルをロードして、その言語にそったマークアップをしてくれます。
toolbar: false」はヘルプ(?マーク)などを表示したくない場合に指定します。


また、予め幾つかのテーマが存在して、そのCSSの読み込みを変えることで背景やマークアップを変更することができます。

下記は、デフォルトのテーマを定義したshThemeDefault.cssを読み込んだ場合。


$("head").append('<link rel="stylesheet" href="http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css" type="text/css" />');


テーマの一覧は、こちら を参照。

今回使用したCSSは「shThemeRDark.css」です。


また、上記のように行をハイライト表示することもできます。


<pre class="brush: js toolbar: false; highlight: [3];" title="行をハイライト表示">function foo() {
function foo() {
    alert('hello');
}
</pre>


highlight: [行番号];」を指定することでその行がハイライト表示となります。


ちなみに、バージョン3.0から挙動が変わっているらしく、コードをダブルクリックすると全選択されますので、それでコピーをするみたいです。

ソースをマウスで囲んでコピーしても改行コードがうまくコピーされないため、貼り付けると崩れてしまいます。


使ってみた感想


アメブロで使う場合に限るのかわかりませんが、ちょっとコードを貼り付けるときの作業が多いかなと。

クラス指定もそうなんですが、アメブロの場合は記事内のHTMLタグを直接編集するモードに切り替えると改行が自動で削除されたりします。

それでpreタグ内に貼り付けたコードが崩れ、編集するたびにそこを修正する作業をする必要が出てきたり、面倒な部分も多いです。


また、最近からアメブロの記事プレビュー時にプラグインが反映されなくなっているので、公開前に確認しようということができません。

あとは、jQueryの$(document).ready()を使っているので、body要素が完全に構築され終わったあとで変換がかかってしまいますので、一瞬ですが素のpreタグの状態でコードが見えたあとに切り替わるというような挙動になってしまいます。


ただ、コードが綺麗に表示されるのは見ていても楽しいですし、労力に見合うだけのことはあるかもしれません。





年度始めということもあり、前年度の評価面談を部下としたんですが、その中で色々悩みもあったらしく、聞いていて自分なりにアドバイスをしてみました。

自分もIT業界で働き出して12年目を向かえることになり、自身がまだ中途半端な部分もあるんですが、同じように悩んだ部分も多くあります。

あの時の自分というものを照らし合わせてみることで、5年目辺りを迎えるエンジニアだけでなく、これからの自分自身というものに対しても何かヒントが出てきそうな気がしています。



今後もこの業界でやっていくか、この業界が肌に合うか


ちょうど5年目となると一通りの仕事も絡むことができ、脱新米として中堅社員としての第一歩を踏み出す頃になります。

しかし、どの仕事でもコアになるような業務を任せてもらえなかったりもするので、自分自身がこの仕事で一人前としてやっていけるかということに不安を覚えたりもします。


私の場合は、結構このIT業界で働くことを希望していたので、そういった不安がそれほど多くありませんでしたし、先輩がいないという特殊な環境だったため良くも悪くも怖いものしらずで仕事を任されていた部分もありました。

ただ、日常からPCに触れているとか、PCに向かって仕事をするのが苦にならないといったことでも、仕事としてそれをやるのはなかなか合わないと感じることもあります。


深夜作業や休日出勤の対応が日常であったりもしますし、人とコミュニケーションをとるのも一日のごく限られた時間で、黙々とPCと向き合わないといけない仕事だったりもします。

納期前には残業が増えて追い込みをかける羽目になることはよくありますし、技術職として自分のタスクや課題は自分でどうにか解決方法を見つけることを求められたりもします。

まず、前提としてそういったワークスタイルが自分に合うかということを考えたりもします。


5年という月日を経験すれば、そういったワークスタイルにも慣れが出てきたりもしますが、それでも根本的に自分の仕事というものを見直したときに、そうまでして仕事としてやっていきたい業界かという疑問にも繋がります。

この大前提ばかりは、自分自身で答えを見つけるしかありません。

やりたいことかどうかの基準は自分の中にしかなく、他人に強要されるものでもありません

5年働いたからその技能を活かさないともったいないよ、というのはありますけど体を壊したり、精神的に拒絶しているのを押し通してまでこの業界で働くことは無いと思います。



どの分野の技術に絞っていくか


自分と話をした部下は、毎年上司が変わりそれにより自分がするべき仕事もころころ変わっているような状況で、なかなか1つの技術が自分の中に見に付かないということを嘆いていました。

要は自分がどんな分野のエンジニアとして食っていけるかということに対して不安があると。


5年の業務経験の中で、様々な仕事に携わることで身に付く技術も多くあります。

個人的には、新人ころにはいろんな仕事をやってみる方が良いと思ってます。

IT業界の中でもいろんなエンジニアの仕事がありますから、業界の合う合わないだけでなく職種として合う合わないというものもあるからです。


また、そういった様々な職種のエンジニアに求められる技術というものは、相関関係にあるのでどれか1つの分野で秀でたものがあっても、エンジニアとして作り上げるシステムには、そこだけ仕事が出来るということではうまくいかないことも多くあります。

関連性があるわけですから、自分の領域の言葉しかわからず、他のエンジニアがやっていることを理解できないということでは、何をすればいいのかということさえもわかっていないということになります。

最初の5年というのは、そういうものを理解するための期間として、幅広い技術にチャレンジして基礎を固めていく期間としてしまってよいのではないでしょうか。


個人的には、5年という月日を経験したエンジニアは、次の5年としてその経験の中から自分に合う、やりたい職種というものにターゲットを絞って、その技術に絞っていく方が良いと思ってます。

技術と一言で言っても分野は多岐にわたりますし、1つの技術でも突き詰めるとかなり深いレイヤまであります。

それらを全てマスターするのは到底無理ですし、それ以上幅を広げたところで基礎的な技術しか身につけていない中途半端なエンジニアになってしまったりします。


逆に経験の中から捨てる分野と仕事にしたい分野を決めてしまい、そこに注力していく方がターゲットを明確に出来たり、その仕事をしていく上でも自信に繋がるでしょう。

経験がある分、例え浅くても後輩から頼られるところもあるかもしれません。

しかし、幅を広げすぎると結局は自分はいろんなことに手はつけているものの、何かをマスターしたいう領域が持てずに、10年後とかに何が出来るエンジニアなのかということに悩む羽目にもなったりします。



どんな技能の組み合わせを武器にしていくか


ある分野の仕事に注力していくことを決めても、それを一本化することはリスクもあります

あるプロプライエタリ製品に特化したエンジニアになっていても、それが別の製品に吸収されたり業界のスタンダードが変われば製品自体が廃れていくということは良くあったりもすることです。


なので、ある程度の技術や技能に分散化して自分自身を投資していく方が替えが利いたりもします。

ネットワークエンジニアというよりは、サーバー周りまでわかるインフラエンジニアの方がどっちの仕事もこなせるでしょうし、特定の言語に特化したプログラマーよりは幾つかの言語を操れる方が環境に依存しない仕事をやっていけます。


その持っている技能が例え中途半端でも、それを組み合わせることで強力な武器にすることも出来ます。

先に書いたように特定の分野だけの話がわかっても、システムを作り上げる目的達成のためには横断的に仕事をしていかないといけないことが多いので、話がわかるレベルでも技術を持ってた方が重宝されたりもします。

プログラマーとしての割り当てられる仕事が無い状況でも、インフラ周りの知識があればその仕事をこなすことが出来るでしょうし、スケジュールの遅れなどからそちらの分野のヘルプとして参加することもできるでしょう。

それによって、特定分野に頼らない仕事ができますし、マネジメントする側から見てもいろんなピースに当てはめることが出来る助っ人として信頼を得ることも出来ます。


これは別に技術だけの話だけじゃなくて、チームメンバーとうまくコミュニケーションが取れたり、小難しい技術の話を噛み砕いて伝えることがうまいというようなヒューマンスキルでも同じことです。

マネジメント能力もそれに該当するでしょうし、資料作りがうまいというだけでも特定の仕事しか出来ないというリスクから開放してくれます。

広げるのは技術だけと決めず、視野を広げることにターゲットをおいてみると、自分だけの武器というものが見えてきたりもするかと思います。


もちろんこれは一つの方法ということですので、自分はこれだと決めた分野一本でやっていくというのもありでしょう。

それにはリスクが伴いますが、成功したリターンも大きくなります。

そういったものにめぐり合えるか、自分の経験からそう思えるものがあったか、というのを考えてみるのも良いかもしれません。


自分はIT業界の中でも特にウェブ関連に特化して技術を身につけてきました。

しかし、それは自分自身でも中途半端なもののだと思っていますし、それを補ってその他のエンジニアと対等に仕事していくためにはどうすればよいかというところを考えたりして、マネジメントの仕事とかもある程度できるように努めてたりもします。

エンジニアとしてはどうなんだ、ってところの自問自答もあるんですがこの業界でやっていくための一つの術だと10年以上この業界でやってきて感じたりもしています。