「AIと著作権に関する考え方」パブコメ結果から、AIに学習させたくない人のすべきことを見つけた

  • 本稿の目的

本稿は、2024(令和6)年1月23日に公表され、意見募集がなされた「AIと著作権に関する考え方について(素案)」につき、その結果(意見に対する回答)が公開されたので、自分の考えたことをまとめる目的で記載する文章である。
本稿は私個人の見解を記載したもので、何らの法的見解や個別の事案への解決策を示すものではなく、引用等を行う場合には十分に裏付けをとったうえで引用等することを強く推奨する。

  • 「AIと著作権に関する考え方」とは

意見募集の「AIと著作権に関する考え方(素案)(概要)」2ページによれば、

著作物に表現された思想又は感情の享受を目的としない行為については、著作物の表現の価値を享受して自己の知的又は精神的欲求を満たすという効用を得ようとする者からの対価回収の機会を損なうものではなく、著作権法が保護しようとしている著作権者の利益を通常害するものではないと考えられます。

との記載がある。私の理解を記載しておくと、著作権法第三十条の四は以下の通り規定されている。

(著作物に表現された思想又は感情の享受を目的としない利用)
第三十条の四 著作物は、次に掲げる場合その他の当該著作物に表現された思想又は感情を自ら享受し又は他人に享受させることを目的としない場合には、その必要と認められる限度において、いずれの方法によるかを問わず、利用することができる。ただし、当該著作物の種類及び用途並びに当該利用の態様に照らし著作権者の利益を不当に害することとなる場合は、この限りでない。
 著作物の録音、録画その他の利用にる技術の開発又は実用化のための試験の用に供する場合
 情報解析(多数の著作物その他の大量の情報から、当該情報を構成する言語、音、影像その他の要素に係る情報を抽出し、比較、分類その他の解析を行うことをいう。第四十七条の五第一項第二号において同じ。)の用に供する場合
 前二号に掲げる場合のほか、著作物の表現についての人の知覚による認識を伴うことなく当該著作物を電子計算機による情報処理の過程における利用その他の利用(プログラムの著作物にあつては、当該著作物の電子計算機における実行を除く。)に供する場合

これは何を意味するかというと、この条文が属するセクション(正確には款)を見ればわかるのであるが、

第五款 著作権の制限

著作者は著作物を他者に使用許諾することにより、金銭的な対価を得ることができるが、著作権法では、「権利制限規定」と呼ばれる例外規定が数多く置かれ、一定の例外的な場合には、権利者の了解を得ずに著作物等を利用できるとされている。
権利者の了解を得ずに著作物を利用できるとは極悪非道で絶対に許されるべきでないと考えることもできるが、第五款の規定によれば、「私的利用」「図書館等における複製等」などは、著作権を行使してその利用に関して金銭的な対価を得ることの例外として定められており、自分ひとりがひとりで楽しむ目的、学術的な目的や教育の目的においては金銭的な対価を求めることができるという範囲の例外であるとの規定である。
研究のために図書館で文献の1部コピーをしたり、開くとボロボロ崩れる貴重な資料をスキャンして電子化したり、自分が家で漫画を読んでキャラクターを真似して書いてみたり、家で漫画のセリフを真似して1人芝居をしても、著作者に対する金銭的な対価の支払をしなくてもよい、そういうことである。

その中で、第三十条の四においては、「著作物に表現された思想又は感情の享受を目的としない利用」も著作者の許諾を得ずに使用できるとされている。
「著作物に表現された思想又は感情の享受を目的としない利用」とは、小説の内容を知りたくて読む・映画の主人公がどうなるか知るために見る・漫画のストーリーを知りたくて読む・好きなアーティストの新しい音楽を聴いて感動したいので聴く、そういった使用でない、つまり単にデータとして取り込む機械学習のようなことを想定している。

なぜこのような機械学習ドンピシャの条文があるかというと、現状の与党である自民党がAIについて強力に推進しているからである。
皆様は覚えているだろうか。OpenAIが欧州で袋叩きにされ、イタリアではchatGPT使用が禁止(後に改善され使用禁止は解除)され、米国では訴訟が多数提起され、米国の俳優や作家の組合がOpenAIを凄まじく批判していた時に、サム・アルトマンが来日し、自民党の本部会合にスーツで現れ講演を行ったことを。
Metaが過去最高額の12億ユーロの制裁金を課され、従前のビジネスの構造を否定され、主財源である広告を潰されたりしている状況で、ザッカーバーグが来日し、岸田首相とAIについて意見交換を行ったことを。
人も資源もない島国に残された新しい技術に自民党が必死になるもの大変わかるところである、そういった思惑もあり、この条文は変更されることなく法として存在している。

当然、著作権法改正時(2018年)にも批判はあったが、AIを活用するという観点からは著作権の例外とするしかない、というスタンスは変更されていない。
しかしながら画像生成AIの台頭により凄まじい論争が巻き起こり、国として法律改正は難しく、一定の法解釈を示すしかないという状況で、法律をどう解釈するか、ということについて国の考えについて素案がまとめられ、意見募集がなされたのである。

意見募集、と記載したが、正しくは意見公募手続(一般にパブリックコメント募集、パブコメ募集と言われる)である。パブコメ募集により、何が起こるかというと、意見を送ったことについて国が回答してくれるのである。
この法律どう思いますか?というざっくりした意見公募手続は国にも国民にも損しかないので、考え方をまとめた文書が国から公開され、それを前提として、その法律に関係のある主体が意見を出して、その文書に具体例をもっと書いて欲しいとかぼんやりしすぎてよく分からないので明確にして欲しい、ということからそもそも法律からそういう解釈をすることができないはずだから間違っている、などの意見に対して管轄省庁などが"ご指摘の通りなので文書に追記しました"とか"今回はそういう話してないです"とか"確かにわかりにくいので明確にしてみました"など回答をする、というものである。

法律の条文を変更することはかなりの手間がかかることである。法律には"詳細は政令による"などと記載され、細かいことは法律の条文に規定せず具体的なことは今回のように"考え方"や"ガイドライン"などに定めることとなっている。考え方やガイドラインという名前だから法律ではなく守らなくていいのでは?と思ってしまうが、法律により指定されたものであるので、法律である。

蛇足だが、今回の素案をまとめる主体は文化庁著作権課であるが、文部科学省の官僚や知的財産を得意とする事務所から出向している弁護士などによりまとめられているのが実態であるようである。仄聞であるから、根拠を示せと言われてもできない。

個人の意見については、論ずるに値しないもの(そもそもAIは全面規制すべき、AIは免許制にすべき)などもある。
法人の意見について同様のものがないとは言い切れないが、法人には当該素案は、概ね好意的または前向きに捉えられているようであった。
また、いくつかの意見については、本当によく資料を読み込んだうえで、自社や自身の利益などを考慮し、なされたものであることが読み取れた。
もし自社で意見を出すことがあれば、お手本にしたいものであるという意見もいくつかあった。

他の法律で解決できることです、と回答されている例
有効な意見であるということで、記載が文化庁により足されたり修正された例
富士通以外は有効な意見であるとされている例

パブコメ結果を見ていて気になったのが、以下の回答である。

絶対にAIに学習させたくない!と考える人たちのために仕組みづくりが必要であるとする意見に対して、文化庁は以下のように回答している。

本考え方では、AI学習のための複製等を防止する為の技術的な措置をとることは自由に可能であること、また、権利者が情報解析に活用できる形で整理したデータベースの著作物を販売している場合は、これをAI学習目的で複製する行為は法第30条の4ただし書に該当し得ること等が確認されています。
なお、この点に関しては、本ただし書の適用範囲が明確となることに資するよう、robots.txtでのアクセス制限において必要となるクローラの名称(User-agent)等の情報が事業者から権利者等の関係者に対して適切に提供されること、また、特定のウェブサイト内のデータを含み情報解析に活用できる形で整理したデータベースの著作物が現在販売されていること及び将来販売される予定があること等の情報が、権利者から事業者等の関係者に対して適切に提供されることにより、クローラによりAI学習データの収集を行おうとするAI開発事業者及びAIサービス提供事業者においてこれらの事情を適切に認識できるような状態が実現されることが望ましいと考えられます。

以下、文化庁の回答について書き下していく。なお、重複の注意書きとはなるが、下記記載については私個人の見解であり、文化庁の回答・その趣旨と一致することを保証しない。取り扱いには十二分に留意されたい。

本考え方では、AI学習のための複製等を防止する為の技術的な措置をとることは自由に可能であること、また、権利者が情報解析に活用できる形で整理したデータベースの著作物を販売している場合は、これをAI学習目的で複製する行為は法第30条の4ただし書に該当し得ること等が確認されています。

この文章には2つの要素、
①AI学習のための複製等を防止する為の技術的な措置をとることは自由に可能であること
②権利者が情報解析に活用できる形で整理したデータベースの著作物を販売している場合
により、
「これをAI学習目的で複製する行為は法第30条の4ただし書に該当し得ること等が確認されてい」るとの記載がある。

①AI学習のための複製等を防止する為の技術的な措置をとることは自由に可能であること
については、本当に何を言っているかわからなかったので、「AIと著作権に関する考え方(素案)令和6年2月29日時点版(見え消し)」を参照した。
以下の通り記載があった。

○ このような権利制限規定一般についての立法趣旨、及び法第30条の4の立法趣旨からすると、著作権者が反対の意思を示していることそれ自体をもって、権利制限規定の対象から除外されると解釈することは困難である。そのため、こうした意思表示があることのみをもって、法第30条の4ただし書に該当するとは考えられない。
○ 他方で、AI学習のための著作物の複製等を防止するための、機械可読な方法による技術的な措置としては、現時点において既に広く行われているものが見受けられる。こうした措置をとることについては、著作権法上、特段の制限は設けられておらず、権利者やウェブサイトの管理者の判断によって自由に行うことが可能である。
(例)ウェブサイト内のファイル”robots.txt”への記述によって、AI学習のための複製を行うクローラによるウェブサイト内へのアクセスを制限する措置
(例)ID・パスワード等を用いた認証によって、AI学習のための複製を行うクローラによるウェブサイト内へのアクセスを制限する措置

ただ単に、著作権者が嫌だと言っているだけだと、それだけで法律に定められたことの対象外になることはないと明記してあり、一定の人々はこれだけで怒り狂えそうだが、怒り狂うことよりも次が重要である。
この分野に全然明るくないので、クローリングを防ぎたければ、何らかファイルに記載したり、認証をかけることによって防止できるということを知った。
IDとパスワードを設定した場所に置くだけでもよいということが記載されている。
これらのクローリングを防ぐような措置をとることは、著作権者やサイトの管理者の判断で行うことができる、別にそれ著作権法違反じゃないし、ということが確認されている。
ちなみにこの箇所は、意見募集前の素案と変更がないようである。

②権利者が情報解析に活用できる形で整理したデータベースの著作物を販売している場合
については、

○ このような技術的な措置は、あるウェブサイト内に掲載されている多数のデータを集積して、情報解析に活用できる形で整理したデータベースの著作物として販売する際に、当該データベースの販売市場との競合を生じさせないために講じられていると評価し得る例がある(データベースの販売に伴う措置、又は販売の準備行為としての措置)。

①のような措置をとるのはなぜか?ということを考えた時に、サイト内の情報を使ってデータベースの著作物として販売したいと考えているから、と判断できるケースがあるからである、という理由が記載されている。
ちなみに、具体的なケースとしては米国・英国・ドイツにおいてメディア(The New York Times, Financial Times, The Guardian, Axel Springer)が①のような措置をとったうえでAPI提供やライセンス契約を締結しているケースが脚注内に記載されている。
すなわち、データベースを販売したり使用許諾したりするでしょう!という判断ができればよいということである。
この箇所についても、意見募集前の素案と変更がないようである。


①②を満たしたうえで、「これをAI学習目的で複製する行為は法第30条の4ただし書に該当し得ること等が確認されてい」る、についてである。
まず、法第30条の4ただし書については、以下である。(太字については筆者による加工)

(著作物に表現された思想又は感情の享受を目的としない利用)
第三十条の四 著作物は、次に掲げる場合その他の当該著作物に表現された思想又は感情を自ら享受し又は他人に享受させることを目的としない場合には、その必要と認められる限度において、いずれの方法によるかを問わず、利用することができる。ただし、当該著作物の種類及び用途並びに当該利用の態様に照らし著作権者の利益を不当に害することとなる場合は、この限りでない。

冒頭で述べたように、著作権法第三十条の四は「著作者の了解なく著作物等を利用していい」という著作権法の例外である。
この規定にも、例外があり(つまり例外の例外)「著作権者の利益を不当に害することとなる」場合は、著作者の了解が必要となるということである。

※話はずれるが、著作者は「著作物を創作する者」、著作権者は「著作権を有する者」であり、大体一致するが、財産権としての著作権は、譲渡や相続することができるので一致しないこともある。文豪とか画家の遺族は著作権者だけど、著作者ではないと言えばわかりやすいかも。

結論としては、以下の通り素案に記載がある。

○ そのため、AI学習のための著作物の複製等を防止する技術的な措置が講じられており、かつ、このような措置が講じられていることや、過去の実績(情報解析に活用できる形で整理したデータベースの著作物の作成実績や、そのライセンス取引に関する実績等)といった事実から、当該ウェブサイト内のデータを含み、情報解析に活用できる形で整理したデータベースの著作物が将来販売される予定があることが推認される場合には、この措置を回避して、クローラにより当該ウェブサイト内に掲載されている多数のデータを収集することにより、AI学習のために当該データベースの著作物の複製等をする行為は、当該データベースの著作物の将来における潜在的販路を阻害する行為として、本ただし書に該当し、法第30条の4による権利制限の対象とはならないことが考えられる。

すごく大雑把にまとめてしまうと、
IDとパスをかけている場所においてある絵の下に「この絵を用いてデータベースを作成予定です。当該データベースは販売またはライセンス予定です」と書いておけば、
勝手にAIに学習させることはできず、されたとしても著作権侵害を主張することができるということである。

それなりの措置を講じて簡単に収集のうえ複製できてしまうような状況を放置せず、またそのデータを販売したりライセンスする予定があることを記載しておけば"いや売る予定があるのに勝手に複製したのあなたですよね?"と言うことができる、そういうことである。

  • 感想

AIと著作権に関する考え方について(素案) をきちんと2024年1月の時点で読み込んでいれば、AIに学習させたくない人のすべきことが分かっていたはずである。なぜなら、AIに学習させたくない人についての記載は追記はされているものの、削除はされておらず、そのままとなっているからである。
オッ!パブコメ募集してるな!程度の認識であったため、回答が出た時点でそれに気づくという間抜けなことをする羽目になった。

私個人は、絵を描くし、楽器も弾くし、俳句などもつくって発表しているが、AIにどんどん喰わせてしまって結構であると考えている。
AIは人間からすると驚異的なスピードで学習をしてそれっぽい成果を出してくれる。
人間はAIに比べればゆっくりではあるが、だれかの真似をすることから始めて自分の作品を作り出し、作品を複数作り出すことでそれに共通するオリジナリティを編み出すことができる。
画像生成AIを憎む人は、一度使用してみるといいと思う。まずは敵を知るべきであるから、ということもあるが人間に遠く及ばないような画像をアウトプットしてくることの方が多いからである。もちろん、凄まじく美しい画像をアウトプットすることもあるが、熟練の技術がなければ凄まじく美しい画像をアウトプットすることはできない、ということを何度か触ることで思い知ることができる。

画像生成AIに対する非常に感情的な反感についての私見は以下の通りである。



  • 雑記

パブコメ回答を見ながら、AI学習禁止…技術的措置…ライセンス予定…なんかこの事案みたことある気がする~X(formerly Twitter)で見た気がする~話題になってた気がする~~と思っていて、検索した。
答えは読売新聞オンラインの会員規約(7条を参照されたい)である。
www.yomiuri.co.jp

第7条 禁止事項等
 8.生成AI等(人工知能、検索拡張生成、RPA、ロボット、プログラム、ソフトウェアを含みますが、これらに限られません。以下同じ)に学習させる行為(検索等の利用により検索エンジンの生成AI等が結果的に学習することとなる行為を含みますが、これらに限られません)または生成AI等を開発する行為

2.本サービスを情報解析(前項第6号から第8号までの禁止行為を含みます)のために利用することはできません。利用者がこれを希望する場合には、当社と別途ライセンス契約を締結する必要があります。

今回のAI学習をさせないための条件を満たす記載がばっちりなされている。
新聞記事が学習されると、新聞社にとって大変なことになるのは誰の目にも明らかである。

そしてさらに面白いのが、この利用規約改定お知らせの日付である。
www.yomiuri.co.jp




2024年1月25日



「AIと著作権に関する考え方について(素案)」につき、意見募集を開始した2024(令和6)年1月23日の2日後である。
意見に対する回答がどうなるかもわからない状況で、素案を読み込み、記載事実を正確に把握したうえで、対応を社内協議し、適切な変更後の規約を作成し、社内稟議を回し、サイトに反映させ、お知らせをつくる、という作業を2日で終わらせた読売新聞、タダ者ではない。

勘弁してくれ

タイトルの通りのことがあったので殴り書きしている。なお、具体的な事象を念頭に置いているがTwitterにいる人々に向けて書いているわけではないことは注記しておく。まあ当該人間がTwitterにいるなら知りませんが。

 

私が嫌だと言っていることを私にするな。自分がされて嫌かな?とか考えるより前に、私はそれをされたくないと何度も明確に言っているので私にそれをするな。仮に自分だけは許してもらえる理由があると思うならそれはおそらく誤りであるし、私がされて嫌だということは論を俟たない。

嫌だからしないでくれ、ということを説得しようとするな。嫌なものは嫌であり、私がそれを克服することが自分(この場合の自分は、私ではない。お前である。)の利益になるということは理解しているが、克服する必要もないと思っている。嫌なのはなんで?という問いも嫌である、嫌なものは嫌であり、克服する必要があると思っているならば、金銭を支払うなどして専門家に依頼する。他人の中に課題を見出し自分がそれを解決できるというのは概ね勘違いであり、自分がいいことをした気になれるが他人には迷惑である、少なくとも私には明確に迷惑である。

私が何も考えずに愚かに今の状況を何の困難もなく幸せに過ごしており、自分だけ悲しみ苦しみ嫌な思いをしていると思っているなら、なかなかいい思考回路の持ち主であるからそのまま生きていけばいいと思う。私には近づかないで欲しいが。

 

 

 

勘弁してくれ

タイトルの通りのことがあったので殴り書きしている。なお、具体的な事象を念頭に置いているがTwitterにいる人々に向けて書いているわけではないことは注記しておく。まあ当該人間がTwitterにいるなら知りませんが。

 

私が嫌だと言っていることを私にするな。自分がされて嫌かな?とか考えるより前に、私はそれをされたくないと何度も明確に言っているので私にそれをするな。仮に自分だけは許してもらえる理由があると思うならそれはおそらく誤りであるし、私がされて嫌だということは論を俟たない。

嫌だからしないでくれ、ということを説得しようとするな。嫌なものは嫌であり、私がそれを克服することが自分(この場合の自分は、私ではない。お前である。)の利益になるということは理解しているが、克服する必要もないと思っている。嫌なのはなんで?という問いも嫌である、嫌なものは嫌であり、克服する必要があると思っているならば、金銭を支払うなどして専門家に依頼する。他人の中に課題を見出し自分がそれを解決できるというのは概ね勘違いであり、自分がいいことをした気になれるが他人には迷惑である、少なくとも私には明確に迷惑である。

私が何も考えずに愚かに今の状況を何の困難もなく幸せに過ごしており、自分だけ悲しみ苦しみ嫌な思いをしていると思っているなら、なかなかいい思考回路の持ち主であるからそのまま生きていけばいいと思う。私には近づかないで欲しいが。

 

 

 

スラムダンクを全く知らないが映画THE FIRST SLAM DUNKを見に行った

 

タイトルの通りである。
めちゃくちゃ映画の話をするので知りたくない人は読まないことをお勧めする。

スラムダンク、とんでもない人気がある漫画であるということは知っていたが、漫画自体はネットでよく見るコラ画像Twitterの画像リプライ(大体クソリプ)でしか接することがなく読む機会もないため読んでいなかった。
けれども、スラムダンクの話をすると目を輝かせる人やいつも話さない人が饒舌になったりするのを見るとスゴイ漫画なんだなあと思うことはよくあった。
スラムダンク自体はよく知らないけれど、スラムダンクの読者を通してその熱い雰囲気のようなものをずっと感じていた。
他人に勧められたこともあり、見に行くことにし、見て感想を書き留めておくかあと思ったのでこれを書いている。


映画を見た後にスラムダンクの漫画を買っていろいろ理解したり調べものをしたりして書きたいことは沢山あるが話がとっ散らかりそうなので、時系列で書いていく。

 

【見る前】
スラムダンクのことを全然知らないので、読者が熱心というか熱いなあという感じ(前述のとおり)しかなかった。全然知らん漫画の映画見てわかるんかな?という不安もちょっとあった。
映画館には平日に行ったにもかかわらず、ほぼ満席。遅刻して後から入ってくる人もおらず期待値みたいなのがすごそうと思った。入る時にコースターみたいなものが特典として貰える。知らないデフォルメされたキャラクターが描いてあってかわいいと思った。
あと、年齢層が幅広くグレイヘアのおじさまからご高齢のご夫婦のような方々、ストリート系ファッションの若者、仕事帰りっぽいOLさんのような方などが観客だった。
皆ポップコーンを食べてたのでスラムダンクってポップコーンが出てくるのかなあと思っていた。

 

【見ている時】
最初は沖縄にいる家族のお話から始まる。父親を早くに亡くして兄弟でバスケットボールをやっているが、兄も海の事故で亡くなってしまうという悲しい始まりだった。
スラムダンクってこんな悲しくて重い話なんか…と思ってしまったが開始早々に決めつけるのはよくないなあと思って見ていた。
そうこうしているとめちゃくちゃにカッコいいドラムと共に動いているキャラクターの輪郭をなぞるようにしてキャラクターが描き出されどんどん増えていく。誰も知らんけどカッコいい。何よりドラムがめちゃくちゃに良い、カッコいい。

映画見た後にツイートするほど良いです。あのドラムは全人類に聞いてほしい。
メンバーがそろって、紅白戦が始まったな~と思ったがインターハイの試合らしい。
ここでひとつ思ったのが、特徴がめちゃくちゃある人以外は見分けがつかない。
白チームの人たちは髪型が全員同じというのもあって、本当に見分けがつかない。
赤チームでは、下まつ毛長い人と腕が上がらないって言っている人の見分けが途中までつかなかった。

この映画でわたしが唯一苦労したことは、人物を見分けることであったが、だいたいの人は漫画の読者であり見分けもつくのであろうから問題にならなさそうだなと思った。
細かいところでよくわからないのは本当に悔しかったが、試合の展開も話の展開も早くそれを気にしている暇はあまりなかった。
バスケットコートの広さや強豪校のパス回しのスピード、選手の体格のよさがリアルに伝わってくるような構成で、コートの中にいる者が様々なプレッシャーと戦っていること、その上で自分の最大限のパフォーマンスを発揮することに挑戦しているということを感じ取ることができた。

この映画の主人公は宮城リョータという人で、他のチームメイトと比べれば身体が小さく、幼少期にはよくできる兄と比べられていた。何かをするときには緊張で手が震えて"心臓バクバク"となるくらいで気が強いわけでもない。
でも、緊張で震える手をポケットに隠したり、身体が小さいからこその技術をそのプライドをもってここ一番のところで発揮(ドリブルこそチビの生きる道なんだよ)して相手を出し抜いたりする。

作中で宮城の「バスケだけが生きる支えだった」という独白があるが、兄とバスケットボールをしていた楽しい思い出も兄と比べられていた、またはその兄を喪ったつらい思い出と関連しているだろうし、遠隔地への引っ越しやそこでの陰湿ないじめ、周囲からの孤立と爽やかな青年とのバスケットボールを通しての出会い、などバスケットボールはいい思い出でありつつもつらい思い出と関連しているという描写が多かった。

それでも、バスケットボールを続けてなお「バスケだけが生きる支えだった」と言えるのはどれだけ強い人間なんだ…と率直に思った。
単体で強い人間なのかもしれないが、監督の「宮城くん、ここは君の舞台ですよ」であったりカーリーヘアのお姉さんの激励、あたたかい言葉はかけないものの態度やプレーで信頼をしていると伝えるチームメイトも、バスケットボールを通じてかかわることになった人間たちがいて、その人間たちが背中を押してくれるから力を発揮することができるんだなとも思った。

宮城が喧嘩をしたり大けがをしたりと母親には迷惑をかけ続けていた、悪かった、でもありがとう、ということを試合に勝って帰ってきてから伝えることができたのも「バスケだけが生きる支えだった」からこそ、死んだ兄と話した・夢見た山王工業高校に兄のリストバンドと共に勝つことを成し遂げた後に一区切りとして、また緊張で震える手をポケットに隠しながら伝えることができたのだろうなと思った。
母親もこっそり試合を見に来ていて、バスケットボールをする宮城を見ると兄を思い出すというつらい思い出がありつつも、宮城のここ一番の強みを目の当たりにして兄とは違うということを認識したうえで穏やかな気持ちで沖縄に似ているのかは知らないが湘南の海を眺めたり、試合を録画したビデオを見ることができるようになったのだろうと考えた。


宮城家にとって、バスケットボールは兄の死を思い出させる忌むべきものであったのだが、ひたむきにバスケットボールに取り組むことによって自分は兄の代わりや代わりになりきれない存在などではなく自分であるということ、今を生きているのは自分であるということをバスケットボールに取り組む姿で納得させる宮城リョータはどう考えてもめちゃくちゃに強い人間である気がする。

ちなみにエンディング曲の歌詞に「遠い星の少年は その腕に約束の飾り」というのがあり、宮城の兄のことを言っているのだなと思ったし「まだ旅路の最中さ」と続くため、ラストに宮城がアメリカで活躍していることすらもまだ旅路の最中なんだなあ、生きている限り旅路は続くんだよなあという少しだけ壮大な感想を抱いた。

多分、漫画で見せ場だったんだろうなというところ(この音が俺をよみがえらせる、おれは今なんだよ、負けたことがあるというのは財産)は漫画を読んでいなくてもわかった。
ほかにもあるのだろうけど、演出がかなりされていたし一発で覚えられるくらいには際立たされていた。


率直に見てよかったなあという映画だった。

【見た後】
漫画を全巻買った。読み進めて現在、三井が"バスケがしたい"と泣いているところである。登場人物が分かってきて、宮城とバスケしようと言う爽やか青年は三井であると分かった。アンタら殴り合いの喧嘩してたやないか…

あと宮城がロードワークしてたら会った女性はマネージャーの彩子さんだとわかった、髪型が全く違うので映画を見ている時には誰だか分からなかった。

また、バスケットボールのルールを全然知らないのだが読み進めていればなんとなくどんなルールがあるということは把握できるので良いなと思った。

積んでみたらこれくらい

映画を見た後に「スラムダンクのことをよく知らない原作愛がない人間がこの映画を作っているらしい」「声優を総入れ替えは裏切り」という意見に接した。
仮に原作愛がなくてこれだけの映画を作れるのであれば、愛と仕事を切り離してもめちゃくちゃに仕事ができる人間であろうし、「よく知らない」が謙遜である可能性を検討すべきである、また、総入れ替えされた後の声優さんたちの演技を見てから異を唱えるべきであると思った。

漫画スラムダンクは、電子書籍版がなく紙の本で買うしかない。
ここまで一気に紙の本をまとめて買ったのも久しぶりであるということもあり、特別な体験になった。
映画を見て漫画を買うという順番でこの経験ができてかなり良かったと思った、スラムダンクを全く知らなかった私のような人間もどんどん映画を見るべきであると思う。

最近見た映画(ほぼ呪術廻戦0の感想になった)

本ブログでは以下の映画のあらすじその他様々な要素を含むため、
それを見て困られる方は読まないことを強くおすすめします。
ラストナイトインソーホー、ハウスオブグッチ、呪術廻戦0

 

最近、映画館に行って映画を見るというアクティビティにハマっている。
前までは映像配信サービスで十分であろうと思っていたが、
映画館においては話せもしないし、スマホもPCも見ることができないため映画の世界に没入することができる。
2000円程度で2時間程度、没入体験を得ることができるというのはなかなか良いと思い、
仕事終わりに見に行っている。
幼い頃はなぜか暗闇が異常に怖く、映画館に行くのが苦手だったし行きたいとも言わなかったがいつの間にか平気になっている部分がある。
高校生の頃も大学生の頃もまだ映画館は怖かった覚えがあるので、なぜかは知らないが平気になってきているようでよかった。

最近見た映画がほぼ全て面白く嬉しかったので、記録として残しておきたくて見た順番に感想等を記載していく。

 

(ラストナイトインソーホー)
アニャテイラージョイのにわかファン(ただ顔面がかなり好みというだけ)だったのと、
女性同士の主演であったので結構ワクワクして事前情報を極力入れずに見に行った。
結論、個人的にはめちゃくちゃ怖いホラーだった。

ロンドンのソーホーで、エロイーズ(現代におけるヒロイン)が1960年代にタイムスリップして当時のソーホーで歌手を目指すサンディ(60年代におけるヒロイン)の立場でいろんなことを体験するというのが大筋。
単なる夢の中の不思議な体験であるタイムスリップから、夢がだんだん現実へ侵食して来るという王道展開であり、ここまでは意外性もないようなストーリーである。

エロイーズがファッションの勉強をするために田舎から出てきて、疎外感や孤独を感じている描写は個人的に共感するところが多かった。
ちょっとした周囲の人間の言動が気になってしょうがない、1人になれば楽なのではと思ってしまい寮を出てアパートを借りるエロイーズの気持ちはとてもわかる。
ネオンカラーで囲まれて発展して行くストーリーとサンディの美しくセクシーなショーは見ているだけでも煌びやかで美しかった。

歌手になりたいというサンディに近づく男はまあ当然に悪い人間で、歌手という夢をダシに彼女を性的に搾取する。
性暴力を受けたことのある人間ならかなり辛い思いをするであろう描写があり、正直私も直視ができなかった。

あとホラー描写がめちゃくちゃ私の心臓に悪く映画館を早く出たいという気持ちがかなりあったが、エロイーズがこの夢の中にいる意味とか理由ってなに!?という疑問があって最後まで見ることができた。

音楽には詳しくないが、聞いていて快い音楽ばかりだったのでサントラなどあれば買うかもしれない。おそらくではあるが、ラストナイトインソーホーの中で音楽はタイムスリップのための装置として働いている。

ショービズの世界で女性が性的に搾取される、というのはまあ珍しいことではないのだろうけどそれを同じショービズの世界で現在生きているアニャテイラージョイの演技もかなり良かった。
健やかで明るく美しいサンディからセクシーなのに陰鬱でしょぼくれているが美しいサンディへの変化はそう簡単にできるものではないなと思わされた。

細かいところで、演出が上手く全体に緊張感がある映画で見た後にはあっという間に感じた。
でもホラーは嫌い。

(ハウスオブグッチ)
レディガガ主演、その他もアダムドライバーアル・パチーノ、ジェレミーアイアンズ、ジャレッド・レト、ジャックヒューストンなど錚々たる役者が揃っており面白くないわけがないので見に行った。
クレジットで監督がリドリースコットであると気づいた。それはいい映画になりますわ。

宣伝文句が それは人を狂わすほどの名声 とかそういうやつだったんですが、
映画見たらそんなに狂っとったか?と個人的には思った。

レディガガ演じるパトリツィア・レッジャーニはまだご存命であり、実の娘2人に対して訴訟を起こしたりしてやりたい放題のご婦人であるがレディガガ演じるパトリツィアは一味違った。
グッチ一族の財産狙いでイケてない引っ込み思案な男と結婚し取り入った、という見られ方が一般的なのであろう。
レディガガのパトリツィアは純粋に夫のマウリツィオ・グッチを愛しており、愛しすぎて自分と夫を一体であるという風に考えるようになってしまったのであろうと思う。
だから夫が他の女性と過ごすのを理解できずに泣くし怒るし最後は人を雇って殺してしまうのだなと見ていて思った。
夫が殺された頃にノートに 天国へ と書きつけたのも単純に用無しになった夫を殺してやったぜという達成感よりも本当にいなくなってしまった、という悲しみや喪失感もあったのだろうと思う。


映画の中ではグッチの株式についての話が何度も出て来る。
いくら家族が円満でも株式を50%ずつで相続させるのは本当にダメだろ、どっちかをマジョリティにしないと何も決まらないだろと思うし外資ファンドに屈辱を感じながら株式を売るあたりはフィクションが強いが、オーナー社長とその親族でやってる中小企業のM&Aもこんなもんなんだろうなと思った。

グッチ一族の男たちが様々に、自分の考えるグッチとはこうだと主張していろんなことを行うのだけれど、トムフォードの圧倒的な才能には誰も勝てなかったんだなと少しかわいそうになった。

音楽も快いものばかりで、当時の流行だったのかなと思ったりした。

あと、レディガガの眼の演技が圧倒的だった。両眼を見開いたまま泡の浮いたバスタブに沈んでいくシーンは凄みのようなものを感じた。
グッチ着ていけばよかった〜と鑑賞後に思ったけど別にいいか。

 

(呪術廻戦0)※2回見た

週刊少年ジャンプで連載中の漫画の映画である。最近どハマりしているので2回見た。
少年の頃に結婚の約束をした女の子を目の前で交通事故で亡くし、その女の子に呪われてしまい周囲にも迷惑がかかってしまうため死んでしまいたい青年、乙骨憂太が主人公である。
呪いを解くために呪いを祓う呪術師の養成学校、呪術高専に入学するところから物語が始まる。
とにかく私は呪術廻戦に過去の経験と涙腺を刺激されやすく、めちゃくちゃ好きな作品である。


物語の要は、乙骨が呪われているのはなぜかということと、その呪いをどうやって解くかというプロセスである。
実は乙骨が呪われている訳ではなく、死んだ女の子(里香)を乙骨が呪いで縛り付けたというのが結末であり、縛り付けた方が呪いを解いたので里香は無事呪いから解放されるのだが、呪術廻戦0に散りばめられた思想に裏打ちされた台詞が良すぎてそれだけで済ませるのはそうは問屋が卸さないという気持ちである。別途でまた文章を書きたい気がするくらい呪術廻戦が好きなので、今回は台詞に限って書いてしまおうと思う。

 

1番最初に死にたいが死のうとしたら、
呪いとなった里香にナイフを結ばれちゃった乙骨に対して目隠しの怪しい男、五条悟が

でも1人は寂しいよ

力の使い方を学びなさい、全てを投げ出すのはそれからでも遅くはないだろう

と声をかける。
1番最初のシーンであるが、呪術廻戦の思想を端的に表現しており開始早々痺れてしまった。
自分に持て余す強大な力に戸惑い、自分を人から遠ざけることで自他を守ろうとするという規範とは別に気持ちがあるだろう、と指摘した上で、
力を使うことをやってみてそれでもダメであれば投げ出してしまってもよいという相手を全否定せず、あくまで自分の意見として伝えている台詞である。
また、五条悟が

これは持論だけどね、愛ほど歪んだ呪いはないよ

と乙骨に伝える台詞がある。
歪んでいるから悪いとか良いとかそういった評価とは別に自分の考えだけ伝える五条の配慮や人間性が見えるなと思った台詞である。

呪術高専で学び始めた乙骨と、呪具(呪いの込められた武具)使いである禅院真希が派遣された先で呪霊に飲み込まれてピンチになるのだが、その時に真希が

オマエ マジで何しにきたんだ呪術高専によ!
何がしたい!何が欲しい!何を叶えたい!

とブチ切れながら聞く台詞がある。
役に立たない乙骨に対する苛立ちや励ましの意味もあっただろうが、真希自身の置かれている状況に対して真希が自分に問い続けてきたことが容易に想像される台詞であった。

それに対して乙骨は

誰かと関わりたい 誰かに必要とされて 生きてていいって自信が欲しいんだ

と回答して、呪霊を祓うために自ら望んで里香を呼び出す。
冒頭の五条悟の1人は寂しいよ、に応える形での回答の台詞である。
おそらく初めて願望を口にし、具体的に行動し逃げることなく立ち向かうという行動を起こした乙骨の台詞であり、生きてていいという自信って何だろうなと考えさせらた。

呪術廻戦の世界では、
登場人物たちに呪いが見えて呪いに対抗できる能力がありその能力を磨くのは当然の前提に見えるが、
呪いが見えず能力もない人間も同時に存在する。(作品内では非術師と呼ばれる)
乙骨をはじめとした登場人物は問題を抱えているものの術師であるという時点で、
十分に能力がある選ばれた人間なのである。
この点について、非術師を蔑み皆殺しにすることを企む夏油(げとう)という人物も登場する。
後半において夏油が乙骨を殺害し強大な力である里香を奪うために戦う展開となる。

夏油は

結局 非術師は自分よりも秀でた存在から目を背けたいだけなのさ
数が多いというだけで強者が弱者に埋もれ虐げられることもある
そういう猿共の厚顔ぶりが吐き気を催す程不快だと 私は言っているんだ

と乙骨を説得するように(実際は殺すつもりなので説得ではないのだろうが)言う。
夏油の言うことにも一理あるなあと自分の経験を思い出していたが、夏油の言うことを受け入れられないなあと思う自分もおり、それはなぜだろうと考えていたが最終的にはどちらの評価基準を選ぶかという問題であり、意思決定の話なのだろうと考えた。
それに対して乙骨は

僕が 僕を生きてていいって思えるように オマエは殺さないといけないんだ

と回答する。
一度目の映画を鑑賞しつつここで考えが閃いた。
夏油も乙骨も呪術師であり、非術師と比べて相対的に優れた能力を持っている。
だから優れた強者を虐げる弱者なんて優れた能力を用いて害してしまえ殺してしまえ、私は人より優れているのだからという夏油と、相対的に優れていることを上手く受け入れられないこと・能力ゆえに他人を害することを自分の苦しみとして捉えそれでも自分が生きていくために自分の生き方を肯定できるようにするんだという乙骨はかなり対照的である。
これは1人の人間の中にある葛藤を夏油と乙骨というキャラクターに仮託させたのだなと私は捉えた。

結局、乙骨が勝利するのであるが私はまたここで自分の経験を思い出して乙骨が勝利してくれてよかったなあとしみじみ思ってしまった。
夏油には夏油の理由やそれに至る葛藤があることを単行本で描かれているので気になる場合は読んでみることをおすすめする。

 

映像と音楽がとても美しく、この監督が呪術廻戦0をどのように捉えているのかというのも随所に散りばめられた演出で何となく掴むことができたように思う。
前半の静かではあるがその孤独や身に染み入るような諦念を語る音楽、夏油と乙骨が戦う箇所の音楽(というかSE)は唸るしかできなかった。

里香は呪いが解けた後も乙骨と共に呪霊として過ごしているよう(cf.単行本)であり、乙骨が呪いをかけなくても愛しいと思った人は自分と共に在ることができると言われているようで私は嬉しく思った。
愛しいと思った人間に対する気持ちはその重大さから自分本位になりがちであり、それを相手が受け入れてくれるかといった不安から相手や自分を傷つけることもある。
相手が死などの別離によってその身体や精神が側になくとも、自分の中に愛しい人は確かに存在し、自分に力を貸してくれたり強さのもとになったりする。
あまりに強い気持ちは時に自分や他人を害するが、自分がどう生きるか、どう生きたいか、何を目的としているかということを問うことによってその気持ちを飼い慣らし自分の強さや力にしていく、そういったことの繰り返しではないか、乙骨の物語はそれを描いているのではないか、そう考えた。

 

呪術廻戦がとても好きなのでこれから何かしら文章を書く気がする。
作品に描かれている物語に強く共感するタイプの作品もあるが、呪術廻戦は自分の過去の経験などに投射して再評価をすることにより、新たな救いを齎してくれる作品である。

 

ほぼ呪術廻戦0の感想になってしまった。

 

京都ってなに

友人に会ったとしたら、近況として何を話すかということを考えた。


だいたいしょうもないことだったりするのだけれど、やはり人に話すということはアウトプットの中でも最も気を遣うし頭も使う。それになによりも修正ができない。

 

最近はとにかく京都に帰りたいという気持ちが強く、休日は図書館に行って旅行本を眺めるか買い物に行くか美術館で作品に没頭するかのどれかしかしていない。

 

京都がどういった存在であるかはよく考えるが、学生時代のなつかしさよりも今の自分になる前の剥き出しの自我の一部を置いてきたような気がしてずっとそれを確かめたくてでもそれがどこにあるかわからなくて京都に帰りたくなるのだろうと思っている。

あと、京都にいる私は東京にいる私よりも優しい気がしているしゆっくり話すしよく考えて話すし洋服を丁寧に選んで着ているし丁寧にお化粧をしているし気前がいい。
別に東京が悪の都であるとは思っていないけれど流れている時間が決定的に違うし、全てが資本主義によって決定されていない気がする。気がするだけだが。

最近よく思っているのは、学生時代でも何でもいいが京都で過ごしたことがあり現在東京で働いている人と京都に帰りたいということ。
別に似通っているものがなくたって、自分が感じていることと他人が感じることを並べてみたいのだと思う。
仕事でマネージャーになりそうとか仕事っぽい悩みとかそういうものが切実になりつつあるからかもしれない、人を育てるとか人と接して育ってもらう(?)みたいなことは自分がどうやって育ったんだっけ?とかどういうことが自分の根本にあるんだっけ?みたいなことと少なくとも自分の中では密接にかかわっているから。

 

夜の鴨川で煙草を吸いながら彼女と別れるかもしれないと話していた友人は、その彼女と結婚し子供ができて離婚した。他人の人生だからか、その顛末よりも寒くてキンと冷えた空に立ち上る煙草のけむりの美しさをよく覚えている。

夜通し鴨川で話して朝を迎え嘘のように青い朝焼けを共に見た友人は音信不通となり生死さえもわからない。二度とあの青い朝焼けを見ることはできないだろうという確信だけがある。

すべてが嫌になって死ぬなら鴨川だと思って走って来たはいいがバカ騒ぎする集団の近くで死にたくないと思って諦めた日もある、そういうくだらない虚栄心なのか自尊心なのかそういったものと嫌というほど向き合わされたこともよく覚えている。

たぶん平安貴族でも恋に破れたり権力闘争に敗れたりして千年前の大路で自分と向き合うこともあったのではないかと考える。

 

今は本当に京都に帰りたい以外の気持ちがない。

東京で働いていて京都にいたことがある同志がいたら声かけてもらえると嬉しいし喜ぶしともに京都に帰ろう。

 

 

CS50:Arrays

CS50 for Japanese(開始4日目。なお、カウントは取り組んでいる日数)

 

Week2 Arrays

前回からとても時間が空いた。本業の法律を数多く勉強していたら後回しになっていった。
金銭を支払って受講等をしていないことのいい点は、無理してやりたくない時に取り組む必要がないことである。

映像授業を受講した。映像は2時間24分59秒。

今回の授業では前回のC言語をより掘り下げていくことが目的として挙げられた。
絶対に間をあけるべきではなかったが、やってしまったものは仕方ない。
特に概念的な特徴であったりそういったものを学習することでより理解を深めるということだった。

 

先週は赤い文字とか黄色い文字(エラー)が出た場合のお話をしていたけれど、今日は無視して実行をしていた白い文字についてもお話していくというのが冒頭で共有された。

  • make は実際のところ、オプション付きでコンパイラであるclangを呼び出すプログラムにすぎません。ソースコードファイルhello.cコンパイルするには、clang hello.cコマンドを実行します。何も起きていないようですが。これはエラーがなかったということです。lsを実行すると、a.outファイルがディレクトリに表示されます。ファイル名はデフォルトのままなので、より具体的に指定するコマンドclang -o hello hello.cを実行できます。

この話をしたときに、clangの表示に関しては歴史的な経緯があって…という共有がなされ、そういった背景があることもあるのねと思った。
大事ではないがそういったこともあることを知ると人間が作った感じがして親しみがわいた。

あと、自動化されて自分たちから見えていなかったことを見て詳らかにしていくというのは、ええやんそんなことせんでも、と思いがちなのだが仕組みを知ることでより深く学習できるという点において優れていると考えた。

 

次に、以下のことが懇切丁寧に説明された。

また、それらの具体的な例と処理について結局はコンピューターの読めるバイナリコードにしていく必要があるのだけれど、それを手動でやっていくととんでもない時間がかかるため、それを自動化していた、それがmakeまたはclangというものであったということでまとめられた。

よって、コンパイルとは実際1つの小さなステップを指すのだが、プログラマコンパイルというと4つのステップを指すのであるとのことだった。

 

次に、バグを見つけて修正する「デバッグ」ということについて。

バグとはその昔、実際に虫が入って不具合を引き起こしていたということに由来するかどうかは確かではないが、意図しない動きやミス、問題のことを言うとのことで、
それを修正するプロセスのことを「デバッグ」というとのこと。

以下は実際に作業をしながら進めていったもの。正直、ついていくので精一杯だった。

  • buggy0.cを見てみましょう。
#include <stdio.h>
  int main(void) {     // Print 10 hashes     for (int i = 0; i <= 10; i++)     {         printf("#\n");     } }
  • 10個の#を印刷したいのですが、11個あるようです (プログラムはエラーなしでコンパイルされているので、ロジックにエラーが発生しています) 。何が問題なのかわからない場合は、一時的に別のprintf を追加します。
#include <stdio.h>
  int main(void) {     for (int i = 0; i <= 10; i++)     {         printf("i is now %i\n", i);         printf("#\n");     } }
  • これで、iが0から開始して10まで続いていることがわかります。forループを10で停止するため、<= 10ではなく< 10とします。
  • CS50 IDEには、プログラムのデバッグに役立つ別のツールdebug50があります。これはスタッフが作成したツールで、gdbと呼ばれる標準ツール上に構築されています。これらのデバッガはどちらも、プログラムをステップバイステップで実行し、プログラムの実行中に変数やその他の情報を確認できるプログラムです。
  • debug50 ./buggy0を実行すると、プログラムを変更したので再コンパイルするように指示されます。次に、デバッガがプログラムを一時停止するコードの行にブレークポイントまたはインジケータを追加するように指示します。
    • ターミナルで上下キーを使うことで、過去のコマンドを再入力せずに利用できます。
  • コードの6行目の左側をクリックすると、赤い円が表示されます。
  • そして、debug50 ./buggy0をもう一度実行すると、右側にデバッガ・パネルが開きます。
  • 作成した変数iローカル変数 (Local Variables) セクションの下にあり、値が0であることがわかります。
  • ブレークポイントは6行目でプログラムを一時停止し、その行を黄色で強調表示しています。続行するには、デバッガパネルにいくつかのコントロールがありますが、青い三角形は、別のブレークポイントまたはプログラムの最後に到達するまでプログラムを続行します。右側にあるカーブした矢印 「Step Over」 は、行を 「Step Over (またいで)」 して行を実行し、直後にプログラムを再び一時停止します。
  • そこで、カーブした矢印を使用して次の行を実行し、その後の変化を確認します。printfの行に戻り、カーブした矢印をもう一度押すと、ターミナルウィンドウに#が1つ表示されます。矢印をもう一度クリックすると、iの値が1に変わります。矢印をクリックし続けると、プログラムが1行ずつ実行されます。
  • デバッガを終了するには、control + Cを押して実行中のプログラムを停止します。
  • buggy1.c: 別の例としてbuggy1.cを見てみましょう。
#include <cs50.h>
#include <stdio.h>
  // Prototype int get_negative_int(void);   int main(void) {     // Get negative integer from user     int i = get_negative_int();     printf("%i\n", i); }   int get_negative_int(void) {     int n;     do     {         n = get_int("Negative Integer: ");     }     while (n < 0);     return n; }
  • 別の関数get_negative_intを実装し、ユーザから負の整数を取得しました。main関数の前にプロトタイプを記述する必要があり、そうすればコードがコンパイルされます。
  • しかし、プログラムを実行すると、負の整数を指定した後も負の整数を指定するように要求され続けます。行10 int i = get_negative_int();ブレークポイントを設定します。これが最初の興味深いコード行だからです。debug50 ./buggy1を実行し、デバッグパネルの 「コールスタック」 セクションでmain関数にいることを確認します (「コールスタック」 とは、その時点でプログラム内で呼び出され、まだから返されていないすべての関数を指します。これまでは、main関数のみが呼び出されていました) 。
  • 下向きの矢印 「Step Into」 をクリックすると、デバッガがその行で呼び出されている関数get_negative_intの中に (into) 移動します。コールスタックが関数の名前で更新され、変数nが値0で更新されています。
  • 「Step Over」をもう一度クリックすると、n-1に更新されています。これは実際に入力した値です。
  • もう一度 「Step Over」 をクリックすると、プログラムがループ内に戻っているのがわかります。whileループはまだ実行中であるため、whileループがチェックする条件はtrueである必要があります。< 0は負の整数を入力すると真であるため、>= 0に変更してバグを修正する必要があります。
  • debug50の使い方を学ぶために少しの時間を投資することで、将来多くの時間を節約することができます。

あと、ちょっとした冗談なのか、初心者はコードについて考えるときはゴム製のアヒルに話しかけろ、聞いてくれる人間がいるのはものすごく幸運だから感謝しろ、とのことだった。
また、自分が論理的だと思っていることを口に出して話してみると非論理的だと気付けることもあるので、ゴム製のアヒルに話しかけることは有効、という話もあった。

 

5分の休憩の後に、メモリの話があった。
正直よくわかっていなかった部分について説明してくれたので理解がクリアになった。
具体的には以下が明確な理解ができた部分である。

  • コンピュータの内部にはRAM(ランダム・アクセス・メモリ)と呼ばれるチップがあります。RAMは、プログラムが実行されている間のコードや、プログラムが開いている間のファイルなど、短期間使用するためのデータを格納します。プログラムやファイルをハードドライブ (またはSSD、ソリッドステートドライブ) に保存して長期保存することもありますが、RAMの方がはるかに高速なので使用します。ただし、RAMは揮発性であるため、データを保存するために電力が必要です。
  • RAMに格納されたバイトは、グリッドにあるかのように考えることができます。
  • 実際には、チップあたり数百万または数十億バイトです。
    • 各バイトはチップ上での位置 (最初のバイト、2番目のバイトなど) に対応します。
  • Cでは、char型の変数を作成すると、その変数は1バイトのサイズになり、RAM上のこれらのボックスの1つに物理的に格納されます。4バイトの整数は、これらのボックスの4つを占有します。

いつも使っているPCやスマホにこういったものが備え付けられ、動作していることに少し感動した。

次に、試験の平均点を算出するコードを書いてみようというところからC言語の配列について学んだ。
C言語においては、連続して格納された値のリストのことを配列と呼ぶらしい。

具体的にやっていたことは以下だが、展開すること、増えること、応用することを念頭に置いて考えることが大変重要になってくるように思う。

  • 3つの数の平均を取りたいとします。
#include <stdio.h>
  int main(void) {     int score1 = 72;     int score2 = 73;     int score3 = 33;       printf("Average: %f\n", (score1 + score2 + score3) / 3.0); }
  • 3ではなく3.0で除算するので、結果もfloatになります。
    • プログラムをコンパイルして実行すると、平均値が表示されます。
  • プログラムの実行中、3つのint変数がメモリに格納されます。
  • 各intは4バイトを表す4つのボックスを持ち、各バイトは8ビットの0、1で構成され、電気部品によって格納されます。
  • メモリ内では、変数を次々に連続して格納し、ループを使用してより簡単にアクセスできることがわかります。Cでは、連続して格納された値のリストを配列と呼びます。
  • 上のプログラムでは、int scores[3];によって3つの整数の配列を宣言できます。
  • また、scores[0] = 72として配列内の変数を割り当てて使用することもできます。大カッコを使用して、配列内の 「0番目」 の位置にインデックスを付けて、その位置に移動します。配列のインデックスは0から始まります。つまり、最初の値のインデックスは0、2番目の値のインデックスは1というようになります。
  • 配列を使用するようにプログラムを更新します。
#include <cs50.h>
#include <stdio.h>
  int main(void) {     int scores[3];     scores[0] = get_int("Score: ");     scores[1] = get_int("Score: ");     scores[2] = get_int("Score: ");       // Print average     printf("Average: %f\n", (scores[0] + scores[1] + scores[2]) / 3.0); }
  • ここで、ユーザに3つの値を要求し、前と同じように平均を出力しようと思いますが、配列に格納された値を使用します。
  • 配列内の項目は、その位置に基づいて設定およびアクセスすることができ、その位置は変数の値にもまたなるため、ループを使用できます。
#include <cs50.h>
#include <stdio.h>
  int main(void) {     int scores[3];     for (int i = 0; i < 3; i++)     {       scores[i] = get_int("Score: ");     }       // Print average     printf("Average: %f\n", (scores[0] + scores[1] + scores[2]) / 3.0); }
  • ハードコーディング、つまり各要素を3回手動で指定する代わりに、forループとiを配列内の各要素のインデックスとして使用します。
  • そして、配列の長さを表す値3を2つの異なる場所で繰り返しました。プログラムでは定数 (固定値の変数) を使用できます。
#include <cs50.h>
#include <stdio.h>
  const int TOTAL = 3;   int main(void) {     int scores[TOTAL];     for (int i = 0; i < TOTAL; i++)     {       scores[i] = get_int("Score: ");     }       printf("Average: %f\n", (scores[0] + scores[1] + scores[2]) / TOTAL); }
  • constキーワードを使用して、TOTALの値がプログラムによって変更されてはならないことをコンパイラに伝えることができます。そして慣例により、変数の宣言をmain関数の外に置き、その名前を大文字にします。これはコンパイラには必要ありませんが、私たちには、この変数が定数であり、最初から見やすいようにします。
    • しかし、正確に3つの値がなければ、現在の平均は間違っている数値です。
  • 平均を計算する関数を追加します。
float average(int length, int array[]) {     int sum = 0;     for (int i = 0; i < length; i++)     {         sum += array[i];     }     return sum / (float) length; }
  • lengthとintの配列 (任意のサイズ) を渡し、ヘルパー関数内で別のループを使用して値を合計して変数sumにします。(float) を使用してlengthをfloatにキャストするので、この2つを分割した結果もfloatになります。
    • main関数では、printf("Average: %f\n", average(TOTAL, scores);を使用して新しいaverage関数を呼び出すことができます。 main内の変数の名前は、のみが渡されるため、averageが呼び出すものと一致させる必要はありません。
    • 配列の長さをaverage関数に渡しているため、average関数はいくつ値があるか知ることができます。

 

正直、今回もついていくのが精一杯で、発展であるとかそういったことにまったく考えが及ばなかった。
実際にC言語を用いて何かをするということがないだけになかなか理解が深まらない部分もあるのかもしれない。

 

本講義のNoteは以下。

https://cs50.jp/x/2021/week2/notes/