音楽とプログラムと

基本的に散文。音楽とか、プログラムとか。

音楽やってたことで、仕事、人生について

自分は学生時代、和声法にハマっていた。芸大和製、シャラン課題、、20代はジャズギターにハマり、セッションにもいくようになった。ただし最近は仕事への時間比重が重く、ご無沙汰である。その上で、、

仕事で役に立つ?ない。練習に過程を応用?そんなのは仕事の経験に勝るもにはない。

じゃあやらなければよかったのか?あの勉強してた時間は無駄か?

もし人生戻れたとして、やらない選択肢はあったか他に時間を使いたかったか?

いいえ、たとえ戻れてももっと音楽をやっている。結果今と同じ仕事をやってても。

音楽は(今のところ)将来にわたる楽しみを与えてくれた。 今でもジャズの新譜や、新しいミュージシャン、聞いたことない音楽への興味は尽きない。

もしあの時間がなかったら、今のようにさまざまなジャンルに興味を持ち、ライブに行きたい欲を持ち、音の一つ一つ、和音、録音の質など多角的に聞き込む趣味は持てなかった。あの和声法思わず「美しい」と漏れてしまう感動を得られなかった。今後生涯退屈することはない、という確信は持てなかった。

だから、もしもっと今の仕事に関わる勉強をしておけば、というIFはない。

ただ、もっと学生時代に勉強はしておけばよかったかな、、。

視点が変わってきた

ここ数年で視点が変わってきたこと。詳細から、より上流に。

  • 作るための技術、抽象化の考え方は引き続き興味はあるものの、それが顧客へのインパクトとどう結びついているかは別問題
  • 〇〇という技術を選んだからとして、顧客の幸せに結びつけれていない。
  • とくに上流がやりたい訳ではなく、課題解決のレイヤーにおいて、より源泉が最終的なシステム価値において重要であり、ただし、自分はその解決の力が足りていない
  • 良いプログラムを書くと価値が上がるかもしれない。しかしそれは非機能的な一部分。
  • 機能的と呼ばれる要件要求は良いプログラムを書いたら解決するのではなく、その前の部分

  • 特に重要だと思うのはビジネス要件定義、ステークホルダ要件定義、業務要件定義と呼ばれる部分

  • この領域は極めてシステム開発において重要にもかかわらず、我々SIerはその次の工程のシステム要件定義、システム方式設計からが主な仕事になる
  • これはビジネス構造上当然で、お客様の課題はまずお客様からスタートし、その内部で企画〜最上流の要件定義、要求定義を行っているから(その言葉を使っているか否かにかかわらず)
  • しかしお客様は要件定義のプロではないので、SIerが伴奏しつつ、企画以降の要件定義を手助けする。
  • このビジネス要件定義は、極めて重要かつ高度な知見、EQ力が必要にもかかわらず、SIerとして日々情報に触れる領域は、開発以降、の情報が多くなっている。
  • これは情報の絶対数の問題。開発の部分は時代によって変わりやすい。変わりやすいということはそれだけ変わった部分に対しての情報が多い。当たり前のこと。書く人が多く、無料でもある。
  • しかしより上流のプロセス設計の方法論は、例えばはてなブログ、Qiita, Zennのような共有サイトで語られることは少ない。
  • 語るとしても抽象度が高いのでその論に対しての答え(詳細)の差が各個人大きい気がする。

次のようなインプットの中、上記で述べるようなプロセス設計の課題解決はごくベースの部分は同じようなことを言ってる(当たり前すぎる?)分は共通している。例えば、問題解決のプロセスは、 現状把握、分析、解決策、評価のような流れがあり、そこにプロジェクト固有の問題、目的やビジョンの違い、ステークホルダーの関わりなど、コンテキストの違いで語られる領域が違う。

この違いの把握と、適用を自分なりに語り、実行できるように今後もまとめていきたい。

clojureのroutingライブラリでbidiがわからなかったのでreititを使ったら楽だった。

clojureでWebアプリを作る方法をしらべるとDuctがよく出てくるのだが、

github.com

元となっているRingを手で動かして理解したかったので、Ductは使わずに簡単なAPIを書きながらチョコチョコやってた。

こちらの記事には大変お世話になった。おかげでhandlerとmiddlewareを完全に理解した。

tech.toyokumo.co.jp

さて、routingのライブラリでbidiで紹介されていたのでそれを使ってゴニョゴニョやっていたのだが、なぜか思うようにいかないルーティングがあり、githubのドキュメントや、書いてあるtestをみたりしていたのだが、ちょっと痒いところに(知りたいところ)手がとどかない。

reititというのがブログの中やqiitaの記事でお見かけし、またググってみると以下の記事 でもなかなかお勧めされてたのでDocumentを読んでみた。

purelyfunctional.tv

Documentがわかりやすく、丁寧な感じで、またmiddlewareの適用のさせ方もなかなか素敵な感じがした。

cljdoc.org

ring-routerというものを使えばうまくいきそう。

早速使ってみるとなかなかいい感じ。 前まで 以下のような感じでmiddlewareを適用させてた。 書き方が悪い?か他の書き方もあるかもしれないが、以下だと、どのリクエストできても全てのmiddlewareを通過してしまう。 handlerごとに別のものを適用させたいときどうするのかな?と思いつつ今のところはそのままでよかったので後回しにしていた。

今まで。以下のような感じ
(def app
     (->
       (make-handler route) ;; routeは別で定義する。bidi使用
       (logger/wrap-with-logger)
       (wrap-json-response)
       (wrap-default-charset "utf-8")
       (wrap-oauth2
         (provider/profile
           {:service-provider :gmail
            :environment      environment}))
       (wrap-cookies)
       (wrap-verify-token)
       (wrap-store-session-token)
       (wrap-session)
       (wrap-keyword-params)
       (wrap-params)
       (r.m.cors/wrap-cors :access-control-allow-origin [#"https://.*localhost:8280" #"https://account.google.com" #"https://www.googleapis.com"]
                           :access-control-allow-headers #{:accept :content-type :authorization}
                           :access-control-allow-methods #{:get :put :post :delete :options :head})))

reititを使うと以下のようになる。

reitit使用

(def default-wrappers
     [[r.m.cors/wrap-cors :access-control-allow-origin [#"https://.*localhost:8280" #"https://account.google.com" #"https://www.googleapis.com"]
       :access-control-allow-headers #{:accept :content-type :authorization}
       :access-control-allow-methods #{:get :put :post :delete :options :head}]
      [wrap-params]
      [wrap-session]
      [wrap-store-session-token]
      [wrap-verify-token]
      [wrap-cookies]
      [wrap-oauth2 (provider/profile
                     {:service-provider :gmail
                      :environment      environment})]
      [wrap-default-charset "utf-8"]
      [wrap-json-response]
      [logger/wrap-with-logger]]

(def app
     (ring/ring-handler
       router
       (constantly {:status 404 :body ""})
       {:middleware default-wrappers})) 
;; この書き方では default-wrappersは全てのルーティングに適用される。

上記では すべてのリクエスト pathに対してdefault-wappersが適用されるが 以下のようにhandlerごとにmiddlewareも適用できるみたいだ。

(def reitit-router
     (ring/router
       ["/" {:middleware [[wrap-json-response]]
               :get route-handler}
          ["login" {:post login-handler
                         :middleware [[wrap-login]] }))

素敵だ。

clojureはライブラリを適用させていく感じがプラモデルを作るようで面白いんだが、Documentがわかりにくいというか、素っ気ない物も多いので(その場合 grep.app で github内の使用方法をみたり、testコードをみたり、slackで検索したりする。)Documentがいい感じなだけで使う意欲がもっとわく。(re-frameもDocumentがいい)

しばらくこれを使って遊んでみよう。

re-frameでas-element内でsubscribeが効かない

auth0のSPAのreactのサンプルを見ながら re-frameでやってみてる。

auth0のサンプルではReact Hooksを使っていたので Reagentでそのまま書くとうまく動かず、どうやら ReagentはJavaScriptでのClass 構文と同様のものになるらしく as-elementというのを使うようだ。 https://github.com/reagent-project/reagent/blob/master/doc/ReactFeatures.md

(:require 
  [reagent.core :as r]
  ["@auth0/auth0-react" :refer (Auth0Provider useAuth0)])

(defn view []
    (let [
        useAuth0 (js->clj (useAuth0))
        {:strs [user
                isAuthenticated
                loginWithRedirect
                getIdTokenClaims
                isLoading
                logout]} useAuth0
        logoutWithRedirect #(logout {:returnTo "redirect/path"})
        {:strs [name email picture sub]} (js->clj user)]
  (r/as-element
    [:div @(subscribe [::some-sub])]
    (if-not isAuthenticated
      [button {:color    "blue"
               :on-click #(loginWithRedirect)} "Login"]
      [button {:on-click #(logoutWithRedirect)} "Log out"])))

これでauth0の提供する関数が使えるようになった。 render関数には [:> view]と書いて渡す。

しかしながら subscribeが効かない! @auth0/auth0-reactを使わず、バニラJavaScript用のを使うか、 renderするときに、as-elementじゃないものを同時に指定して解決するかどうするか。。

何かを創るときに通過する考えは似てる。

 

 Paul Grahamの翻訳記事をみた。

翻訳者に感謝します。

practical-scheme.net 

 

 

これを読んで思い出した想いがあったのでかく。

Paul Grahamの記事とはあまり関係ない。

 

よく言われていることだし、多分同じ感想を持つ人も多いと思うけれど創作するという行為にかんしてはソフトウェアも音楽も近いと思う。

 

ソフトウェアは作品であり、音楽の曲も作品である。

そしてどちらも世の中にでるまではいい物でも悪い物でもない。

人を感動させたり、幸せにする作品はあたりまえながら、知られているもの、つまり世の中にでているものである。

 

昔作曲家になりたかった。

僕は20歳ごろ、和声法や対位法などを先生について学びつつ、ポピュラー理論とタイトルがあるものを読みさっていた。

作曲するたびに「もっといい曲をかかなければ」「こんなんじゃだめだ」など思い納得いくような曲がなかなかできなかった。

時が立ち、それなりに自分ではいい曲がかけたり、知り合いや周りの人や家族に聞かせてなかなかいい評価を受けた。

だけどそれだけだった。

なぜ世の中に出そうと思わなかった、もしくは演奏しようと思わなかったのか。

自分の中の基準で世の中に出す基準ではなかったからである。

ではなぜそこまでいたらなかったのか。

そこはやり切る力がなかったから。いつまでも納得ができず、一つの作品をなっとくいくまで作り切るのがしんどかった。

世の中で売れている曲、名曲といわれているものは、音楽的に(学んだ理論や過去のクラシカルな名曲の観点からは)素晴らしいものばかりではないが、確実にそれらは名曲だった。

 

何が名曲にさせるのか。

いろいろあるけど、まずは世の中に出すことだ。知られること。

知られないと名曲になることは永遠にない。

 

ソフトウェアの界隈ではよく「アウトプット」が大事と言われるが、ここでのアプトプットは学んだことのアウトプットを指すことを言ってることが多いように感じる。

音楽の世界のアウトプットは(アウトプットとは言わないが)演奏者なら演奏すること、作曲者なら曲を世の中に聞いてもらうようにすることである。

 

和声を学んでその学んだことをアウトプットするのもいいけれど、多分音楽家は何せ音楽としてのアウトプットありきだと思う。

ソフトウェアも知識や技術のアプトプットではなく、作品、ソフトのアウトプットが人を感動させ、幸せにすると思う。

 

楽家ではない人が和声法のブログで幸せになることはない。

ソフトウェアエンジニアではない人が技術ブログで幸せになることはない。

 

人を幸せにするのは作品であり、また誰かを何者かにするには作品を世の中に出すこと。

音楽を学び始めたのきっかけは自分でも作曲したい、演奏したい、からだったはず。

 

そしてプログラムを学び始めたきっかけも(ただ楽しかったのもあるけど)世の中に役に立つものを作りたい、という思いだった。

 

今音楽はお休みしているが、世の中に出す、ためのアプリを開発してる。

そんな時、Paul Grahamの翻訳記事をみたので昔感じていたことを思い出した。

僕が ジャズギターを ある程度?弾けるようになった流れ

趣味でジャズギターをやっています。

べつに語れるほどうまくはないのですが、たまにセッションにいきますし、

アドリブっていうのが、いまはどういうものか語れるくらいにはなったので、

初心者の方が参考になるかなーと思って書いてみます。

 

ジャズギターってマイナーなイメージでしたがいまはコミュニティも盛んでそうでもないのかなって感じています。ブログなどでいろんな情報を発表している方が多いので(多くはないかな)人口は増えてるのでは?

 

僕は19歳くらいのときにジャズ、という言葉に憧れて、ききだし、当時フォークギターを弾いていたのでその流れでジャズギターにも憧れて練習を始めたのですがまったくものにならず、弾けずに一度あきらめたのでした。

 

当時やっていたことといえば、

・ジャズギター系の本を買って真似してみる。

・おふとんジャズというサイトを見て真似してみる。

・理論系の本をかって勉強してみる

・指板上のどこに何の音があるかわかるようにする

 

などやっていました。

フレーズだけはそりゃ練習すれば引けますが、いざアドリブとなるととってつけたようになりまったく歌がなくお手上げでした。アドリブとは僕にとっては

「めちゃめちゃ練習した人のみたどりつける境地」みたいなものでした。

実際練習はたくさん必要ですが、そんな仙人みたいな境地にならなくてもアドリブは

ひけます。

さてどうやって弾けるようになったのでしょうか。

 

ギターをやめて数年後、テレビである女子高生サックスプレイヤーを見ました。

寺久保エレナさんです。

衝撃をうけました。自分より全然若い人がこんなすごいフレーズをバリバリ吹いてる。

 

僕は文字通り押入れにしまってあったアコースティックギターをとりだしたのでした。

「もう一度挑戦してみよう」

そうこころに決めたのでした。

 

以前の二の舞にならないようにまず

「習おう」

というところからスタートしました。

僕の住んでいるところは地方都市で、初めはなかなか先生がみつからず、またその先生も「ほんとうにジャズを弾ける先生なんてこのへんにいるのだろうか」という

上から目線でした(笑)

今となってはジャズを弾くこと(レベルはさておき)がそこまで高度なことではないのはわかるのですが、まだ20歳前後の記憶があったので疑いがつよかったです。

 

ようやく見つけた先生のところへ通いだしました。

初レッスンはブルース進行をもとに「とりあえず ひいてみて」みたいな

ものだったと思います。

僕は音をたよりにとりあえず弾いていましたが、当然ジャズっぽくありません。

先生が言われたことは

 

「まずコードトーンを弾く練習をしてください」ということでした。

 

ぼくはこの言葉をきっかけにアドリブの世界に飛び込みました。

 

具体的にはどうするかと言うと、まあそのままの意味ですが、

例えばCm7 というコードがあれば曲に合わせ(枯葉を練習していました)

C 、E♭、G 、B♭を4部音符で弾くだけです。

このとき大切なのは必ずオンリズムで弾くことでした。音楽に合わせる、メトローム

合わせるなど。

僕はこの時点でギターのフレット上に何の音があるというのはある程度わかっていたので1週間程度で枯葉の曲に合わせて、とりあえずコードトーンを弾く、ということが

できるようになりました。

今思えば、指板の音を把握していたり、譜面を読めたりできたのもよかったと思います。

 

ギタリストは譜面に弱いとよく言われますが、TABを読むことになれてしまっているのです。ジャズはTABはよろしくないです。何の音を弾いてるかを把握している必要があるためです。またのちにフレーズ分析など、自分のスタイルをつくっていくのにも音を把握する能力は必須だとおもいます。

 

話それますが、指板の音をどうやって把握できるようになるのでしょうか?

人それぞれやり方があると思いますが、僕のやったやりかたは

まず

Cのおとだけ把握する

1弦の8フレット、2限の1フレット、3限の5フレットなど。

そのあとGの音だけとか。

音程のこともまったくわからない人であれば、キーボードを持つのもいいと思います。

鍵盤楽器は音が非常に見やすいので、音程や理論的なことを把握するのに非常に役に立ちます。

譜面はどうするかというと、まずギターの前に

5線譜上でとにかく書きまくるのをお勧めします。

ドの位置を覚えたら、歌いながら(大切)レの音をかく、飛ばしてソの音を書くなど。

そうすることで譜面がまずなにが書いてあるかがわかるようになります。

そのあとギターを持ち少しずつ、リンクさせていけばいいと思います。

 

さて戻りますが、

コードトーンを追うことでまずジャズの扉?を開くことになるのですが、当然それだけではまったく思い描いたアドリブではありません。

 

次に重要な概念が 

 

解決

 

です。

 

章節が変わる時、次のコードの3度の音になるようにフレーズをもっていくのです。

いきなり長いフレーズからでは難しいのでたとえば

G7 -> CM7に行く時であれば 

ファ ー> ミ だけ弾く。

これをやはり曲に合わせて弾く。

ほかのコードもできるようになれば下から上へ解決、上から下へ、

またいで解決 レ ファ ー> ミ など

すこしづつ音を増やしていきました。

またいろんなポジションでもできるように練習しました。

これでジャズ っぽく少しなっていました。

 

が、まだまだこれくらいではジャズっぽいとは到底言えません。

ぼくは色々情報収集したあげく

フレーズ集なるものを買いました。

「シングル・ラインの演奏を極める ジャズギター ライン&フレーズ」ATN出版

です。(かいてて思い出しましたが、挫折時代に300フレーズとかなんか延々とフレーズが載ってあるのがありましたが、あんなにあっても何が大切なのかなにすればいいのかわからないので、仙人的になれる人以外はまずこの本がオススメです。)

 

この本はオススメです!

簡単な必要な理論的なことやフレーズことはじめから

いろいろなセンスあるフレーズがのってありました。

僕はこれでドミナントフレーズ中心に練習し、アドリブのなかにとりこんでいきました。

するとだんだんとジャズっぽくなっていくではありませんか。

僕はそのフレーズ集のなかの気に入ったフレーズを繰り返し練習しだんだんと自然にでてくるようにしていきました。

 

その後コピーをするようになりました。

これも挫折時代にもしていたのですが、やはり当時はコピーするだけでその後どうすればいいかわからず身につかずにいました。プロを目指すようなかたはコピーをしまくって音感だけで実践にできるとおもうのですが、僕はそこまでできる人間じゃなかったのでどうすればいいかいろいろ考えたのですが、これも人それぞれだとおもいますが、

 

分析作業が大切です!

これはある程度簡単な理論は知っておく必要があります。

理論はよく不要だとか必要だとかありますが、僕の立場としては

理論は自分の中で音を分析するために必要なものだと思っています。

長さを把握するのに定規があるとないとでは応用が全然ちがいますよね?

なにか立体的なものをつくるのに定規なしでも作れると思いますが、あればより

正確に優れたものが作れると思います。

ぼくは音楽理論を定規のようなものだと思っています。

さて

僕の分析のやりかた、応用のさせ方ですが、

コピーして採譜をする(楽譜にかきだす)

その音がどの音からはじまっているか、を把握する

例えば

Cのコードの 3度からはじまっているな

Cのコード上でDのコードトーン?リディアンスケールかな?

GでBのコードトーンか、オルタードスケールからとれるコードを弾いてるな

 

とかです。

そうすれば、何かの曲を弾く時に応用が利くようになります。

 

そうすることでだんだん自分のスタイルみたいなものができてくると思います。

セッションに行くと、みなさんすごく上手いのですが、フレーズから普段聞いているもの、影響をうけたものが違うのを感じれるのでおもしろいです。

 

簡単ですが上記のような流れでだんだんとアドリブというのがわかってきた気がします。もりろんもっと色々なことをやってきたのですが、また時間があれば。

 

あと挫折時代にはジャズギタリストはパットメセニーとかジムホールとか、ウェスとかくらいしかしりませんでしたが、再開したときに再度ジャズ系の情報を集め始めると

カートローゼンウィンケル、ラーゲルンド、マイクモレノなど新しい世代のギタリストがいて音楽を聴くと先進的ですばらしく、それもギターに再度はまったきっかけの一つなのでした。