Wikibooks
jawikibooks
https://ja.wikibooks.org/wiki/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8
MediaWiki 1.39.0-wmf.21
first-letter
メディア
特別
トーク
利用者
利用者・トーク
Wikibooks
Wikibooks・トーク
ファイル
ファイル・トーク
MediaWiki
MediaWiki・トーク
テンプレート
テンプレート・トーク
ヘルプ
ヘルプ・トーク
カテゴリ
カテゴリ・トーク
Transwiki
Transwiki‐ノート
TimedText
TimedText talk
モジュール
モジュール・トーク
Gadget
Gadget talk
Gadget definition
Gadget definition talk
Wikibooks:投稿ブロック依頼
4
3877
205687
205373
2022-07-22T16:34:13Z
Honooo
14373
/* 2022年 */ サブページ呼び込みました。
wikitext
text/x-wiki
{{Purge}}
{{投稿ブロック依頼}}
== 投稿ブロックの依頼場所 ==
===2022年===
{{Wikibooks:投稿ブロック依頼/すじにくシチュー 20220122}}
{{Wikibooks:投稿ブロック依頼/Honooo}}
=== 2021年 ===
===={{User|保守者}}、{{User|Green225}}====
[[w:進行中の荒らし行為/長期/Weil1235]]と同一人物と思われます。このユーザーアカウント者は複数のアカウント持っています。また最後の警告をしたにも関わらず荒らし行為を続けています。無期限ブロックし、アカウント作成出来なくするべきです。--[[利用者:チーズパイン|チーズパイン]] ([[利用者・トーク:チーズパイン|トーク]]) 2021年3月2日 (金) 14:40 (UTC)
*(即時終了)依頼者は編集回数50回未満のため依頼無効、即時終了を求めます。またおそらく2人まとめて依頼されたと思いますが、前者はウィキブックス上にアカウント自体存在しません。--[[利用者:Mario1257|Mario1257]] ([[利用者・トーク:Mario1257|トーク]]) 2021年3月3日 (水) 18:06 (UTC)
=== 2019年 ===
==== {{User|理論物理学者1}}、{{User|理論物理学者2}}、{{User|特殊相対論 入門}} ====
ソックパペットを使った履歴の分断。どれか一つを残して無期限ブロックとすべき。--[[利用者:新幹線|新幹線]] ([[利用者・トーク:新幹線|トーク]]) 2019年1月25日 (金) 08:49 (UTC)
: (報告) [[User:Tomzo]]さんにより全アカウント無期限ブロックとなりました。--[[利用者:新幹線|新幹線]] ([[利用者・トーク:新幹線|トーク]]) 2019年1月31日 (木) 04:25 (UTC)
::(コメント)「[[:w:Wikipedia:進行中の荒らし行為#理論物理学者1系]]」を援用しブロックしています。残念ながら、wikibooksは参加者が少ないため、丁寧な対応はできない場合があり、wikipediaにおける複数の参加者による判定を援用せざるを得ない場合もあると考えています。こちらに参加する場合、wikipediaにおいて、「進行中の荒らし」であるとの判断を解いてからご参加ください。
::なお、出典を挙げられているとの御主張ですが、書物を羅列しているだけでは出典提示とは決して言えず、記述事項に紐づける必要があります。まずこれができていませんし、おそらくあの中で最も基礎的な知識で理解できるはずの「[[w:マイケルソン・モーリーの実験]]」すら、大きく誤解をされている点から、本プロジェクトが[[Wikibooks:基本方針とガイドライン#記事の内容に関するガイドライン]]において、援用する「[[:w:Wikipedia:検証可能性|事実を確認する]]」に抵触するものと判断しています。---[[利用者:Tomzo|Tomzo]] ([[利用者・トーク:Tomzo|トーク]]) 2019年2月1日 (金) 13:39 (UTC)
:::(報告)同一人物のソックパペットと思しきユーザー{{User|理論物理学者3}}{{User|理論物理学者4}}の存在を確認しています。--[[利用者:椎楽|椎楽]] ([[利用者・トーク:椎楽|トーク]]) 2019年8月25日 (日) 14:39 (UTC)
::::(対処)[[利用者:椎楽|椎楽]]さんのご指摘通り、{{User|理論物理学者1}}のソックパペットと判断し、無期限ブロックとしました。{{User|理論物理学者3}}{{User|理論物理学者4}}の御二方(?)に。不服があるのであれば、Wikipediaにおける「[[:w:Wikipedia:進行中の荒らし行為#理論物理学者1系]]」のブロック理由を解決してから、参加していただきたいと思います。なお、ここで答える必要は全くないのですが、「『独自研究』が禁止であるならば、その根拠を示してほしい 」とのことですが、「[[Wikibooks:ウィキブックスは何でないか#調査・発表の場ではない]]」をご一読いただきたいと思います。---[[利用者:Tomzo|Tomzo]] ([[利用者・トーク:Tomzo|トーク]]) 2019年8月26日 (月) 03:33 (UTC)
===={{User|日本のしきたりを大切にする人}}====
[[w:進行中の荒らし行為/長期/Mikihisa]]と同一人物と思われます。--[[利用者:椎楽|椎楽]] ([[利用者・トーク:椎楽|トーク]]) 2019年3月29日 (金) 14:40 (UTC)
:(終了)対象アカウントはLTAとしてグローバルロックされましたので,本依頼は終了とします。--[[利用者:かげろん|かげろん]] ([[利用者・トーク:かげろん|トーク]]) 2019年3月29日 (金) 15:50 (UTC)
{{wikibooks:投稿ブロック依頼/131.129.65.141}}
=== 2018年 ===
==== {{IPuser|115.37.84.198}} {{IPuser|115.37.88.31}} ====
IP 115.37.84.198 および同一人物と考えられる IP115.37.88.31 の投稿ブロックを依頼します。
まず、投稿内容が攻撃的です。記事本文で間違いを修正するのは構いませんが、攻撃をつけくわえるべきでありません。
記事『[[学習方法/普通科高校全般]]』での彼の投稿で「残念ながら現在のwikibooks日本語版には、こういった基本的なことを理解していない残念な大人が書いたと思しき不正確な学習方法の解説が(このページも含め)各所に掲載されています。」とあります。
間違いがあるなら、単に粛々とマチガイを修正すべきなのです。マチガイの修正は、ウィキブックスでは禁止されていません。
どうしても他の投稿者の批判をするなら、マチガイを修正したにもかかわらず、同じマチガイを投稿する人がいたりした場合にのみ、批判をすべきです。
また、トークページで批判を述べるならまだしも、しかし記事本文で他の投稿者への批判を書くべきではありません。読者を、議論に巻き込むべきではありません。読者は議論の参加者ではありません。
彼の行動は『[[Wikipedia:個人攻撃はしない]]』に違反していると思います。個人攻撃とは、けっして形式的に「馬鹿」だの「アホ」だの言うことだけではないと思います。記事修正などの解決策があるにもかかわらず他の投稿者を批判することもまた実質的に個人攻撃でしょう。
wikipediaやwikibooksには免責事項(『[[Wikibooks:免責事項]]』)がありますので、マチガイをする事自体は、望ましくありませんが、批判をされるべきではありません。記事修正の手段が与えられてるにもかかわらず、自身で修正せずに他投稿者を批判をすることは、初心者などの他投稿者を萎縮させてしまいます。よって、残念ながら、免責事項を尊重できない人については、コミュニティを疲弊させる人だと見做し、相応の措置が必要だと思います。
マチガイは単に修正すればいいだけです。マチガイの修正をしても差し戻すなどの問題行為があれば、その時点で、やっと批判をするべきです。--[[利用者:すじにくシチュー|すじにくシチュー]] ([[利用者・トーク:すじにくシチュー|トーク]]) 2018年5月18日 (金) 12:30 (UTC)
:(反対)あまりに厚顔無恥な投稿ブロック依頼です。これを許せば、批判的記述にいくらでも投稿ブロック要請ができるようになります。--[[利用者:椎楽|椎楽]] ([[利用者・トーク:椎楽|トーク]]) 2018年5月19日 (土) 04:58 (UTC)
(すじにくシチュー の返答:)記事本文での批判的記述を止めないことは、ルール違反であり、ブロックまたは何らかの強制的な処置(該当ページへの投稿禁止など)をすべきだと思います。しかも、記事本文では批判しないように注意をしたにもかかわらず、彼は記事本文での批判を止めません。また、トークページでの対案または修正投稿を具体的に示さない批判も、程度によってはブロック要請を検討すべきだと思います。なぜなら、それをしないと、「批判」という抜け穴をつかって、個人攻撃が可能になってしまうからです。たとえるなら裁判における原告の挙証責任のようなもので、他者に批判をする以上は、自分の批判が正当であることを証明するための対案・修正投稿を具体的に示すべきです。--[[利用者:すじにくシチュー|すじにくシチュー]] ([[利用者・トーク:すじにくシチュー|トーク]]) 2018年5月19日 (土) 08:49 (UTC)
:(コメント:)何を言っているんですか? まさか[[トーク:学習方法/高校倫理]]にて、私があなたの記事を差し戻したときに散々私を批判したことを忘れたのですか。そのときにも私の差し戻しについての対案を出しましたか? 私の能力に勝手に言及していました(「品質管理かのようなフリをしている偽善者」「椎楽は、記事を書くだけの思考能力に到達してないように感じます」)が、そのときも「原告の挙証責任」とやらに基づいているんですか?(念のために言っておきますが、'''ノートなら批判もいいんだという意味不明の俺様ルールは無しでお願いしますね。あなたの場合、あまりにも俺様ルールが多すぎて、議論になりません'''。)
:私はあなたの批判に相当頭に来ましたし、反論も書きましたが、批判したことを個人攻撃とみなして投稿ブロックを依頼しようとは全く思いもよりませんでした。どんなにクソッタレな批判であっても、批判の自由は担保されなければならない。それは、wikiのルール云々以前の自由主義社会での言論における基本ですから。はっきりいいます。今回の'''あなたのブロック申請は、あなた自身の行為も縛ることになるのですが、それでもよろしいですか?'''--[[利用者:椎楽|椎楽]] ([[利用者・トーク:椎楽|トーク]]) 2018年5月19日 (土) 15:36 (UTC)
:<span style="color:red">'''(警告:)私自身がブロックされることを覚悟の上で言わせていただきます。明後日5月22日午前0時までにこのブロック依頼が取り下げられない場合、すじにくシチュー氏への投稿ブロック依頼を提出いたします。'''</span>大まかな理由は1.数々の暴言。特に記事内の暴言。2.記事の私物化。3.投稿者への態度。特にIPユーザーに対する露骨な侮蔑。4.ルールの恣意的運用。5.投稿ブロックを二回受けているにもかかわらず反省の色が見られない。6.今回の恫喝的なブロック依頼。以上6点からです。--[[利用者:椎楽|椎楽]] ([[利用者・トーク:椎楽|トーク]]) 2018年5月19日 (土) 15:50 (UTC)
*(終了)本件は合意不成立のまま、実質的に審議終結済みと理解します。万一問題再発等あれば、お手数ですが再度ご依頼の程お願いいたします。 --[[利用者:Kanjy|Kanjy]] ([[利用者・トーク:Kanjy|トーク]]) 2020年8月23日 (日) 09:16 (UTC)
{{Wikibooks:投稿ブロック依頼/すじにくシチュー}}
{{Wikibooks:投稿ブロック依頼/2001:4898:80E8::/60 追認}}
===={{IPuser|113.0.235.249}}{{IPuser|218.27.136.18}}====
中国からのユーザーで、自然科学系を中心に記事の漢字を繁体字や簡体字にする荒らしです。ここ数か月間、IPアドレスを点々としながら同様の荒らしを行っています。--[[利用者:椎楽|椎楽]] ([[利用者・トーク:椎楽|トーク]]) 2018年10月14日 (日) 07:03 (UTC)
*(1件対処)113.0.235.249に関しては,1週間の投稿ブロックを行いました(218.27.136.18については,しばらく状況を注視します)。今後,IPが遷移すれば,その都度ブロックすることになるかなと思います。それでもうまいこと抑えが効かないようであれば,広域ブロックを検討することになるかなとは思いますが,最小限の範囲に抑えるのが大変かも。--[[利用者:かげろん|かげろん]] ([[利用者・トーク:かげろん|トーク]]) 2018年10月14日 (日) 11:50 (UTC)
**(追加対処)218.27.136.18についても,再度荒らし投稿が行われたため,1週間の投稿ブロックを行いました。なお,中国のIPから同様の編集があった場合は,しばらくはこの依頼にぶら下げて報告していただけると助かります。--[[利用者:かげろん|かげろん]] ([[利用者・トーク:かげろん|トーク]]) 2018年10月14日 (日) 14:58 (UTC)
**ご返事が遅くなってすみません。投稿ブロックお疲れ様でした。そして、以降の編集への報告の件了解です。--[[利用者:椎楽|椎楽]] ([[利用者・トーク:椎楽|トーク]]) 2018年10月15日 (月) 13:59 (UTC)
**(追加報告){{IPuser|125.37.163.96}}。いつもの[[数学]]への無意味な編集、IPが中国という点で同一人物と思われます。--[[利用者:椎楽|椎楽]] ([[利用者・トーク:椎楽|トーク]]) 2018年10月18日 (木) 13:58 (UTC)
**(追加報告){{IPuser|113.0.235.196}}。攻撃対象が同じ・IPアドレスも中国と同一人物の可能性大。悪質化が進行している?--[[利用者:椎楽|椎楽]] ([[利用者・トーク:椎楽|トーク]]) 2018年10月21日 (日) 13:27 (UTC)
*(1件ブロック)「113.0.235.~」のアドレスについては/26指定で1週間の広域ブロックとしました。お手数をおかけしますが,マンパワーが少ないプロジェクトなので,引き続き注視していただけると助かります。--[[利用者:かげろん|かげろん]] ([[利用者・トーク:かげろん|トーク]]) 2018年10月22日 (月) 10:58 (UTC)
**(追加報告){{IPuser|221.206.91.188}}また中国・ハルピンからの荒らしが活動を始めたようです。--[[利用者:椎楽|椎楽]] ([[利用者・トーク:椎楽|トーク]]) 2018年11月30日 (金) 14:50 (UTC)
**(追加報告){{IPuser|113.3.194.87}}{{IPuser|221.206.37.89|}}上記と同一人物と思しきIPです。--[[利用者:椎楽|椎楽]] ([[利用者・トーク:椎楽|トーク]]) 2018年11月30日 (金) 14:59 (UTC)
*(12月1日対処)単独のIPアドレス113.3.194.87,広域ブロックとして3つのレンジ(113.7.64.0/18,113.0.235.0/24,221.206.0.0/17)の3つの帯域をそれぞれ1か月ブロックしました。今のところ,これでふさげているとは思いますが,単独のIPアドレスのみだけに留めている範囲の別のIPアドレスやまだ出現していないところから同様の荒らし行為が起こるかもしれません。その場合は,再度,ご報告ください。--[[利用者:かげろん|かげろん]] ([[利用者・トーク:かげろん|トーク]]) 2018年12月1日 (土) 05:33 (UTC)
*(12月17日対処)113.3.0.0./16の帯域を1か月のブロックとしました。--[[利用者:かげろん|かげろん]] ([[利用者・トーク:かげろん|トーク]]) 2018年12月17日 (月) 12:20 (UTC)
**(追加報告){{IPuser|122.159.13.22}}{{IPuser|1.189.59.22}}同一人物ないし模倣犯。--[[利用者:椎楽|椎楽]] ([[利用者・トーク:椎楽|トーク]]) 2019年5月4日 (土) 04:03 (UTC)
***(終了)本件はこれまでの対処により収束済と理解しております。再発等あれば、お手数ですが別途ご依頼の程お願いいたします。 --[[利用者:Kanjy|Kanjy]] ([[利用者・トーク:Kanjy|トーク]]) 2020年8月23日 (日) 09:16 (UTC)
=== 2017年 ===
==== {{IPuser|112.138.116.138}} ====
[[:w:ja:User:112.138.116.138]]参照。Cross-wiki案件。--[[利用者:Wikiuser15442|Wikiuser15442]] ([[利用者・トーク:Wikiuser15442|トーク]]) 2017年10月10日 (火) 09:24 (UTC)
*(コメント)今後,再発するかどうかを注視します。問題行動が再発すればブロック対応が行われることになるでしょう。問題行動が起これば,再度こちらに報告をお願いします。--[[利用者:かげろん|かげろん]] ([[利用者・トーク:かげろん|トーク]]) 2017年10月12日 (木) 14:09 (UTC)
**(終了)その後、こちらでの再発はなかったようです。 --[[利用者:Kanjy|Kanjy]] ([[利用者・トーク:Kanjy|トーク]]) 2020年8月23日 (日) 09:16 (UTC)
=== 2016年 ===
=== {{IPuser|14.3.95.102}} ===
荒らし 14.3.92.24 と類似しており、おそらく同一人物。記事『OpenOffice.org Basic』『OpenOffice.org Calc Basic』などに対する不適切なブロック依頼の連発。ブロック依頼の際も、他人が書いた記事なのに「ライセンス規約を読まない寄稿であったため.」などと言ったりと意味不明である。初版製作者を装っているが、その証明が無く、初版製作者でないことが明白。いちどブロック依頼が拒否されても「再度, 削除をお願いします.」と、なんの証明もなく、何度も同様の依頼をする。
よって、形式的な説明を装っている荒らしである。これらのアドレス(14.3.95.102 および 14.3.92.24)の長期ブロックをお願いします。--[[利用者:すじにくシチュー|すじにくシチュー]] ([[利用者・トーク:すじにくシチュー|トーク]]) 2016年2月29日 (月) 04:23 (UTC)
*(コメント)ちょっと苦言を。まず,安易に荒らしと呼ぶことはお控えください。ISPは同じですが,他人が書いたのか当人が書いたのか,その区別はしようがない状況なのです(アカウントユーザーであればまだ確認できたのですが……)。ですから,「他人が書いた」とか「初版製作者でないことが明白」などそういう言葉は慎んでいただき,軽々しく使わないでいただきたいです。この件に関しては,このブロック依頼を出す前に削除依頼の場で対話を試みるなどの方法をまず講じてほしかったです。削除依頼はまだクローズされていませんから,対話を試みるのも一手でしょう。ひょっとしたら他の管理者の方が即時存続でクローズしてしまうかもしれませんが……。--[[利用者:かげろん|かげろん]] ([[利用者・トーク:かげろん|トーク]]) 2016年2月29日 (月) 06:30 (UTC)
**(対処報告)その後 2016年4月1日に再発し、同日 Vigorous action さんにより一か月ブロックされました。 --[[利用者:Kanjy|Kanjy]] ([[利用者・トーク:Kanjy|トーク]]) 2020年8月23日 (日) 09:16 (UTC)
[[Category:ウィキブックス|とうこうふろつくいらい]]
s7u04z57l8gcivqw8vlua378b6vwhxw
Ruby
0
6662
205681
205564
2022-07-22T15:38:52Z
Ef3
694
/* 様々なクラス・オブジェクトとリテラル */ Fix typo
wikitext
text/x-wiki
{{Pathnav|メインページ|工学|情報技術|プログラミング|frame=1}}
{{Wikipedia}}
本書は、[[w:Ruby|Ruby]]のチュートリアルです。
Rubyは、比較的習得が容易なオブジェクト指向スクリプティング言語です。
[[w:まつもとゆきひろ|まつもとゆきひろ]]によって開発されました。
[[Ruby on Rails]]の記述言語として選ばれたことで有名になりましたが、ウェブアプリケーション以外にもシステム管理やネットワークアプリケーションなどさまざまな用途に用いられます。
__TOC__
== 準備 ==
=== rubyインタープリターの準備 ===
まずはrubyインタープリターを用意しましょう<ref>インタープリターを <code>ruby</code>、スクリプティング言語を <code>Ruby</code> とかき分けます。</ref>。
インタープリターとは、あなたが書いたスクリプトを読んでそれを実行してくれるソフトウェアです。
[https://www.ruby-lang.org/ja/ Ruby公式サイト]の「[https://www.ruby-lang.org/ja/downloads/ ダウンロード]」ページから、
それぞれの環境に合ったインタープリターをダウンロードして下さい。
具体的なインストール手順は環境によって違うので、「[https://www.ruby-lang.org/ja/documentation/installation/ Rubyのインストール]」を参照して下さい。
準備ができたら、試しにコマンドラインからインタープリターを呼び出してみましょう。
;バージョンを確かめる:<syntaxhighlight lang="console">
% ruby --version
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux-gnu]
</syntaxhighlight>
環境によってバージョンが異なると思います。
2022年6月現在、ruby-1.x は全てEoL(End-of-Life;サポート終了)、
ruby-2.x は 2.7 がセキュリティメンテナンス、それ以外はEOL、
ruby-3.x は 3.0 - 3.1 がノーマルメンテナンス、3.2 がプレビューです<ref>[https://www.ruby-lang.org/en/downloads/branches/ Ruby Maintenance Branches]</ref>。
もしご自身の環境の ruby のバージョンが既にサポート終了しているのであれば、サポートされているバージョンへのアップデートを検討してください。
本書では ruby-2.7 以降を想定しています。
;ミススペルすると:<syntaxhighlight lang="console">
% ruby --vertion
ruby: invalid option --vertion (-h will show valid options) (RuntimeError)
</syntaxhighlight>
versionの綴りが違うとこの様なメッセーが出ます。案内に従って <code>ruby -h</code> を実行してみましょう。
;コマンドラインオプションの説明:<syntaxhighlight lang="console">
% ruby -h
Usage: ruby [switches] [--] [programfile] [arguments]
-0[octal] specify record separator (\0, if no argument)
-a autosplit mode with -n or -p (splits $_ into $F)
-c check syntax only
-Cdirectory cd to directory before executing your script
-d set debugging flags (set $DEBUG to true)
-e 'command' one line of script. Several -e's allowed. Omit [programfile]
-Eex[:in] specify the default external and internal character encodings
-Fpattern split() pattern for autosplit (-a)
-i[extension] edit ARGV files in place (make backup if extension supplied)
-Idirectory specify $LOAD_PATH directory (may be used more than once)
-l enable line ending processing
-n assume 'while gets(); ... end' loop around your script
-p assume loop like -n but print line also like sed
-rlibrary require the library before executing your script
-s enable some switch parsing for switches after script name
-S look for the script using PATH environment variable
-v print the version number, then turn on verbose mode
-w turn warnings on for your script
-W[level=2|:category] set warning level; 0=silence, 1=medium, 2=verbose
-x[directory] strip off text before #!ruby line and perhaps cd to directory
--jit enable JIT for the platform, same as --yjit (experimental)
--mjit enable C compiler-based JIT compiler (experimental)
--yjit enable in-process JIT compiler (experimental)
-h show this message, --help for more info
</syntaxhighlight>
これもバージョンによって表示が違います。
<!---
其々のコマンドラインオプションの説明は割愛しましたが、ワンライナーを書くときに役に立つ -nle など代表的な組合わせをコラム(?)で紹介すべきでしょう
--->
=== Hello, World! ===
他の多くのチュートリアルがそうであるように、
私たちもまずはRubyの世界にあいさつすることから始めましょう。
''hello.rb''というファイルを作り(Rubyではスクリプトファイルに''.rb''という拡張子を付けることが通例となっています)、次のように書いて保存して下さい。
;[https://paiza.io/projects/hz-ldiAi0zhpaSqjteWLXw?language=cpp hello.rb]:<syntaxhighlight lang=ruby>
puts 'Hello, World!'
</syntaxhighlight>
それではこのスクリプトを実行してみましょう。コマンドラインから次のようにタイプして下さい。
:<syntaxhighlight lang="console">
% ruby hello.rb
Hello, World!
%
</syntaxhighlight>
この1行のスクリプトは、メソッド<code>puts</code> に文字リテラル<code>'Hello, World!'</code>を渡し呼出しています。
<!--- https://techracho.bpsinc.jp/hachi8833/2020_11_27/26969
=== 文字コード ===
ruby では日本語表示できますが、ソースコードの文字コードを UTF-8 に設定する必要があります。
標準的なテキストエディタなら、メニューバーにある「ファイル」のコマンド一覧に「文字コードを指定して保存」のようなコマンドがあるので、それで UTF-8 を指定して保存してください。
コード例
<syntaxhighlight lang=ruby>
# hello.rb
s = 'こんにちは、世界'
puts s
</syntaxhighlight>
実行例
こんにちは、世界
--->
== irb ==
irb(Interactive Ruby) は、Rubyを対話的に実行するためのコマンドシェル<ref>REPL (Read Eval Print Loop)</ref>です<ref>irb は ruby インタープリターと違いスクリプトの実行には必須なプログラムではありませんが、対話的にコードを評価出来るのが便利です。</ref>。
;irbで 'Hello, World!':<syntaxhighlight lang="irb" line>
% irb
irb(main):001:0> puts "Hello, world!"
Hello, world!
=> nil
irb(main):002:0> exit
%
</syntaxhighlight>
# シェルから irb を起動
# <code>puts "Hello, world!"</code>と入力し、エンターを押して評価しています。
# <code>Hello, world!</code> は <code>puts</code> メソッドの出力です。
# <code>=> nil</code> は、<code>puts</code> メソッドの戻値です。
# <code>exit</code> で irb を終了しています。
# シェルのプロンプトに復帰
=== irbのインストール ===
環境によっては、rubyインタプリターとは別にirbを追加でインストールしないと、irbは使えない場合もあります。
もし、<code>irb</code> がインストールされていないのであれば、実行環境のパッケージマネージャーで irb を検索しインストールしてください。
また、[[W:Rubygems|rubygems]] にも [https://rubygems.org/gems/irb irb のパッケージ]があるので
:<syntaxhighlight lang=csh>
% sudo gem install irb
</syntaxhighlight>
でインストールできます。
<!-- rubygems の解説も項目を改めて(?)必要 -->
== 変数 ==
オブジェクトを変数に代入するには
:<syntaxhighlight lang="ruby">
変数名 = オブジェクト
</syntaxhighlight>
の様に代入演算子 <code>=</code> を使います。
;[https://paiza.io/projects/x1_UlCeb1PtW8pG8Xi-i-g?language=ruby 変数へのオブジェクトの代入と参照]:<syntaxhighlight lang="ruby" line>
a = 1
p a
a = "abc"
p a
a = [1, 2, 3]
p a
b = a
p b
b[1] = 999
p a
</syntaxhighlight>
;表示結果:<syntaxhighlight lang="text">
1
"abc"
[1, 2, 3]
[1, 2, 3]
[1, 999, 3]
</syntaxhighlight>
# 変数 <var>a</var> に整数 1 を代入
# メソッド p に <var>a</var> を引数とした呼出し
#* 変数 <var>a</var> を使った参照
#* <code>1</code> が表示される
# 変数 <var>a</var> に文字列 "abc" を代入
# <code>"abc"</code> が表示される
# 変数 <var>a</var> に配列 [1, 2, 3] を代入
# <code>[1, 2, 3]</code> が表示される
# 変数 <var>b</var> に変数 <var>a</var> が参照しているオブジェクトを代入
#* ここでは、配列 [1, 2, 3]
# やはり、<code>[1, 2, 3]</code> が表示される
# 変数 <var>b</var> の参照している配列の1番目の要素に 999 を代入
#* これは変数ではなく配列の要素への代入
#* 配列の先頭は0番目
# 変数 <var>a</var> を使って参照すると
#* 1番目の要素が 999 に書換わって <code>[1, 999, 3]</code> となっている
代入は、オブジェクトに後から参照するための名前(変数名)をつけることに他なりません。
このため、変数の参照するオブジェクトを別の変数に代入すると「別名」を作ることになります。
{{コラム|puts メソッドと p メソッド|2=
putsメソッドはオブジェクトにto_sメソッドで適用した結果を表示します。
これに対し、pメソッドはオブジェクトにinspectメソッドで適用した結果を表示します。
;[https://paiza.io/projects/uZV53RJGbr3FKbscJc8tiw?language=ruby putsとp]:<syntaxhighlight lang="ruby">
puts "Hello, world!"
p "Hello, world!"
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
Hello, world!
"Hello, world!"
</syntaxhighlight>
}}
== オブジェクト ==
Ruby では、多くのものがオブジェクトで、オブジェクトは1つのクラスに属しています。
他のオブジェクト指向プログラミング言語では、整数や文字列などはメソッドをプリミティブとして別扱いし、
ラッパーをオブジェクトを用意することでメソッドがないことを補っていますが、
Ruby では整数や文字列など基本的なデータ型もオブジェクトでメソッドを持ちます。
=== オブジェクトのクラスを調べる ===
オブジェクトのクラスを調べるには、 .class メソッドを使います。
<syntaxhighlight lang="irb" line>
$ irb
irb(main):001:0> 0.class
=> Integer
irb(main):002:0> "abc".class
=> String
irb(main):003:0> [1,2,3].class
=> Array
irb(main):004:0> ({a:2, b:3, c:5, d:7}).class
=> Hash
irb(main):005:0> (1...99).class
irb(main):005:0> (1...99).class
=> Range
</syntaxhighlight>
=== 全てのクラスのスーパークラス Object ===
Object は全てのクラスのスーパークラスです。
== 式と演算子 ==
式 (expression) や演算子 (operator) について説明します。
Rubyにはい可能な演算子があります。
* 代入演算子
* 比較演算子
* 算術演算子
* ビット演算子
* 論理演算子
* 文字列演算子
* 条件(三項)演算子
* カンマ演算子
=== オブジェクトとメソッド演算子 ===
演算子はオブジェクトのメソッドの特殊な形で、二項演算子の場合は左辺のオブジェクトがレシーバーになります。
<pre>
Object(==, ===, =~)
Array(+, -, *, &, <<, <=>, ==, [], []=)
Hash(==, ===, [], []=)
String(%, *, +, <<, <=>, ==, =~, [], []=)
Numeric(+, -, <=>)
Float(+, -, *, /, %, **, ==, <, >, <=, >=, <=>)
Integer(+, -, *, /, %, **, ==, <=, >=, <=>, <<, >>, [], &, |, ^, ~, **)
Range(==, ===)
Regexp(==, ===, =~)
</pre>
=== 演算子の優先順位と結合方向 ===
演算子には優先順位 (結合力の強さ) と結合方向があります。
a + b - c
は
( a + b ) - c
と同じ(加減算は左結合)。
a + b * c
は
a + ( b * c )
と同じ(乗除算は加減算より優先順位が高い)。
a = b = 0
は
a = ( b = 0 )
と同じ(代入は右結合)。
<!-- ここに演算子の優先順位と結合方向の表を挿入します -->
== 様々なクラス・オブジェクトとリテラル ==
Ruby では、変数に束縛することが出来るものは全てオブジェクトです。
オブジェクトは必ず1つのクラスに属しています。
全てのクラスにリテラル表現があるわけではありませんが、組込みライブラリーの主要なクラスにはリテラル表現が用意されています。
=== 数値クラス ===
数値クラスは整数クラスあるいは浮動小数点数クラスです。
;[https://paiza.io/projects/Jo78O4vlCkQOar1YYB3Erg?language=ruby 数値クラス]:<syntaxhighlight lang="ruby">
p 2 + 6
p 2.0 + 6
p 2 + 6.0
p 2.0 + 6.0
p 2.class
p 2.methods
p 2.0.class
p 2.0.methods
</syntaxhighlight>
;表示結果:<syntaxhighlight lang="text">
8
8.0
8.0
8.0
Integer
[:anybits?, :nobits?, :downto, :times, :pred, :pow, :**, :<=>, :<<, :>>, :<=, :>=, :==, :===, :next, :lcm, :digits, :[], :~, :gcd, :gcdlcm, :-@, :upto, :%, :chr, :&, :*, :+, :bit_length, :inspect, :-, :/, :integer?, :even?, :odd?, :size, :succ, :<, :>, :ord, :to_int, :to_s, :to_i, :to_f, :to_r, :div, :divmod, :fdiv, :^, :coerce, :modulo, :remainder, :abs, :magnitude, :zero?, :floor, :ceil, :round, :truncate, :numerator, :|, :denominator, :rationalize, :allbits?, :dup, :arg, :real?, :+@, :rect, :polar, :real, :imaginary, :imag, :abs2, :angle, :phase, :conjugate, :rectangular, :to_c, :conj, :infinite?, :finite?, :eql?, :singleton_method_added, :quo, :clone, :i, :nonzero?, :step, :positive?, :negative?, :between?, :clamp, :singleton_class, :itself, :taint, :tainted?, :untaint, :untrust, :untrusted?, :trust, :methods, :singleton_methods, :protected_methods, :private_methods, :public_methods, :instance_variables, :instance_variable_get, :instance_variable_set, :instance_variable_defined?, :remove_instance_variable, :instance_of?, :kind_of?, :is_a?, :display, :hash, :public_send, :class, :frozen?, :tap, :then, :yield_self, :extend, :method, :public_method, :singleton_method, :define_singleton_method, :=~, :!~, :nil?, :respond_to?, :freeze, :object_id, :send, :to_enum, :enum_for, :__send__, :!, :__id__, :instance_eval, :instance_exec, :!=, :equal?]
Float
[:arg, :-@, :**, :<=>, :<=, :>=, :==, :===, :angle, :phase, :positive?, :nan?, :infinite?, :finite?, :next_float, :prev_float, :eql?, :%, :*, :+, :inspect, :-, :/, :<, :>, :to_int, :to_s, :to_i, :to_f, :to_r, :divmod, :fdiv, :quo, :coerce, :modulo, :abs, :magnitude, :zero?, :floor, :ceil, :round, :truncate, :numerator, :denominator, :rationalize, :negative?, :hash, :dup, :real?, :+@, :rect, :polar, :real, :imaginary, :imag, :abs2, :conjugate, :rectangular, :to_c, :conj, :integer?, :singleton_method_added, :div, :clone, :i, :remainder, :nonzero?, :step, :between?, :clamp, :singleton_class, :itself, :taint, :tainted?, :untaint, :untrust, :untrusted?, :trust, :methods, :singleton_methods, :protected_methods, :private_methods, :public_methods, :instance_variables, :instance_variable_get, :instance_variable_set, :instance_variable_defined?, :remove_instance_variable, :instance_of?, :kind_of?, :is_a?, :display, :public_send, :class, :frozen?, :tap, :then, :yield_self, :extend, :method, :public_method, :singleton_method, :define_singleton_method, :=~, :!~, :nil?, :respond_to?, :freeze, :object_id, :send, :to_enum, :enum_for, :__send__, :!, :__id__, :instance_eval, :instance_exec, :!=, :equal?]
</syntaxhighlight>
浮動小数点数リテラルは、小数点以下が 0 でも 6. の様に 0 を'''省略できません'''。
=== 文字列クラス ===
文字列リテラルは <code>'</code> あるいは <code>"</code> で囲います。
上の例の、<code>'Hello World!'</code> が文字リテラルの一例です。
;[https://paiza.io/projects/d-FL4g4crwTR65Uy51jWXg?language=ruby 文字列クラス]:<syntaxhighlight lang="ruby">
p "2" + "6"
p "abc" * 6
p "→%d" % 6
p "2".concat "6"
p "abc".class
p "abc".methods
</syntaxhighlight>
;表示結果:<syntaxhighlight lang="text">
"26"
"abcabcabcabcabcabc"
"→6"
"26"
String
[:unicode_normalized?, :encode!, :unicode_normalize, :ascii_only?, :unicode_normalize!, :to_r, :encode, :to_c, :include?, :%, :*, :+, :unpack, :unpack1, :count, :partition, :+@, :-@, :<=>, :<<, :sum, :==, :===, :next, :=~, :[], :[]=, :empty?, :casecmp, :eql?, :insert, :casecmp?, :match?, :bytesize, :match, :next!, :succ!, :index, :upto, :replace, :rindex, :chr, :clear, :byteslice, :getbyte, :setbyte, :freeze, :scrub, :scrub!, :dump, :inspect, :intern, :upcase, :downcase, :capitalize, :swapcase, :upcase!, :undump, :length, :size, :downcase!, :succ, :swapcase!, :hex, :capitalize!, :split, :chars, :oct, :grapheme_clusters, :concat, :codepoints, :lines, :bytes, :to_str, :end_with?, :start_with?, :reverse, :reverse!, :sub, :to_s, :to_i, :to_f, :rjust, :center, :prepend, :crypt, :ord, :chomp, :strip, :to_sym, :ljust, :delete_prefix, :delete_suffix, :lstrip, :gsub, :scan, :chomp!, :sub!, :gsub!, :rstrip, :delete_prefix!, :chop, :lstrip!, :rstrip!, :chop!, :delete_suffix!, :strip!, :tr_s, :delete, :squeeze, :tr!, :tr, :delete!, :squeeze!, :each_line, :each_byte, :tr_s!, :each_codepoint, :each_grapheme_cluster, :slice, :slice!, :each_char, :encoding, :force_encoding, :b, :valid_encoding?, :rpartition, :hash, :between?, :clamp, :<=, :>=, :<, :>, :singleton_class, :dup, :itself, :taint, :tainted?, :untaint, :untrust, :untrusted?, :trust, :methods, :singleton_methods, :protected_methods, :private_methods, :public_methods, :instance_variables, :instance_variable_get, :instance_variable_set, :instance_variable_defined?, :remove_instance_variable, :instance_of?, :kind_of?, :is_a?, :display, :public_send, :class, :frozen?, :tap, :then, :yield_self, :extend, :clone, :method, :public_method, :singleton_method, :define_singleton_method, :!~, :nil?, :respond_to?, :object_id, :send, :to_enum, :enum_for, :__send__, :!, :__id__, :instance_eval, :instance_exec, :!=, :equal?]
</syntaxhighlight>
文字オブジェクトの <code>+</code> 演算子は、concatメソッドの別名です。
この様に、同じ演算子でも左辺に来るオブジェクトによって行われる処理が変わります。
==== 式展開 ====
<code>"</code> で囲んだ文字列リテラル中には <code>#{ 式 }</code>の形で式を埋込む事ができます。
<code>'</code> で囲んだ文字列リテラル中では <code>#{ 式 }</code>の形で式は展開されません。
;[https://paiza.io/projects/Jo78O4vlCkQOar1YYB3Erg?language=ruby 文字列リテラルに式を埋込んだ例]:<syntaxhighlight lang="ruby">
</syntaxhighlight>
;表示結果:<syntaxhighlight lang="text">
</syntaxhighlight>
;[https://paiza.io/projects/7Xvz_1StHFRL0ozCvKnwMw?language=ruby 文字列リテラルに式を埋込んだ例]:<syntaxhighlight lang="ruby">
p "12 + 8 = #{12 + 8}"
p %|"abc".upcase = #{"abc".upcase}|
</syntaxhighlight>
;表示結果:<syntaxhighlight lang="text">
"12 + 8 = 20"
"\"abc\".upcase = ABC"
</syntaxhighlight>
=== 文字リテラル ===
[https://paiza.io/projects/-9rsAGNcN-m-PN_ZhffwDg?language=ruby 例]
p ?a
p ?字
p ?😈
p ?😈.class
実行結果
"a"
"字"
"😈"
String
=== 正規表現クラスと正規表現リテラル ===
=== 配列クラスと配列式 ===
=== ハッシュクラスとハッシュ式 ===
=== 範囲クラスと範囲演算子式 ===
範囲演算子式は、範囲クラス(Range)のリテラルで{{code|開始 .. 終了}}の形式です。
<!--- Rangeのeachメソッドは perl 等の[[W:Foreach文|foreach文]]にあたるブロック付きメソッド呼び出しのイテレーターです。-->
;[https://paiza.io/projects/xBwKk7uZ1WKba2Ti2Qy_rQ?language=ruby Rangeオブジェクト]:<syntaxhighlight lang="ruby">
r = (0..9)
p r
p r.class
r.each {|x| p x }
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
0..9
Range
0
1
2
3
4
5
6
7
8
9
</syntaxhighlight>
:putsメソッドはオブジェクトにto_sメソッドで適用した結果を表示するのに対し、pメソッドはオブジェクトにinspectメソッドで適用した結果を表示します。
;[https://paiza.io/projects/uZV53RJGbr3FKbscJc8tiw?language=ruby putsとp]:<syntaxhighlight lang="ruby">
puts "Hello, world!"
p "Hello, world!"
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
Hello, world!
"Hello, world!"
</syntaxhighlight>
=== シンボル ===
=== %記法 ===
== メソッド ==
'''メソッド'''(''method'')は、処理の塊に名前を付けて再利用する仕組みです。
一般的なプログラミング言語でのサブルーチン・プロシージャあるいは命令と呼ばれるものと共通する特徴を持ちますが、'''主語'''に相当するオブジェクトがあるところが異なります。
メソッドはキーワード <code>def</code> を使って定義します。
;[https://paiza.io/projects/gpNItFmxOxwCATYVVGX00w?language=ruby コード]:<syntaxhighlight lang="ruby" line>
def hello()
puts "Hell World!"
end
hello()
self.hello()
</syntaxhighlight>
;表示結果:<syntaxhighlight lang="text">
Hell World!
Hell World!
</syntaxhighlight>
# メソッド <code>hello</code> の定義の開始
# メソッド <code>hello</code> の本体
# メソッド <code>hello</code> の定義の終了
#
# メソッド <code>hello</code> の呼出し
# メソッド <code>hello</code> を <code>self</code>を明示して呼出し
=== 仮引数を伴ったメソッド ===
メソッドには、仮引数としてオブジェクトを渡すことができます。
;[https://paiza.io/projects/G3yTvRLuEW3VEsQ1H43YMg?language=ruby 仮引数を伴ったメソッド]:<syntaxhighlight lang="ruby">
def show_sum(a, b)
puts a + b
end
show_sum(1, 3)
show_sum(5, 2)
</syntaxhighlight>
;表示結果:<syntaxhighlight lang="text">
4
7
</syntaxhighlight>
=== 戻り値を返すメソッド ===
メソッドは、戻り値としてオブジェクトを返すことができます。
;[https://paiza.io/projects/-qE9Wq6ngZC1XPeDX8C0LA?language=ruby 戻り値を返すメソッドの例]:<syntaxhighlight lang="ruby">
def get_sum(a, b)
return a + b
end
puts get_sum(1, 3)
puts get_sum(5, 2)
</syntaxhighlight>
;表示結果:<syntaxhighlight lang="text">
4
7
</syntaxhighlight>
=== 変数のスコープ ===
メソッドの中で作られた変数のスコープはメソッドローカルです。
;[https://paiza.io/projects/lIpUl1uIDKCop6QzwVEDSg?language=ruby 変数のスコープ]:<syntaxhighlight lang="ruby" line>
a = 100
x = 99
def get_sum(a, b)
x = 0
return a + b
end
puts [a,x]
puts get_sum(1, 3)
puts get_sum(5, 2)
</syntaxhighlight>
;表示結果:<syntaxhighlight lang="text">
100
99
4
7
</syntaxhighlight>
: 1行目で 100 が代入された変数 a は、メソッド get_sum の仮引数 a とは関係なく 100 のまま
: 2行目で 99 が代入された変数 x は、メソッド get_sum の中で 0 が代入された x とは関係なく 99 のまま
この様に、メソッドの中からはメソッドの外の変数を(仮引数を介すなどの手段を取らない限り)参照出来ません。
また、メソッドをスコープとする変数をメソッドの呼出し元から参照できません。
{{コラム|Rubyと変数宣言|2=
「メソッドの中で作られた」と、やや歯切れの悪い表現ですが、Ruby では変数を「宣言」しません。
強いて言うならば、最初の代入が変数の宣言です。}}
<!--- 以下は項を変えて解説が必要
グローバル変数
クラス変数
インスタンス変数
特殊変数
--->
{{コラム|メソッドの引数リストを囲む括弧の省略|2=
メソッドの引数リストを囲む括弧 <code>p(</code> と <code>)</code> は、曖昧さのない場合は省略可能です。
上の例は、<code>puts(s)</code>と書く代わりに、<code>put s</code> と書く事ができます。
;コード:<syntaxhighlight lang="ruby">
s = 'Hello World!'
puts s
</syntaxhighlight>
;表示結果:<syntaxhighlight lang="text">
Hello World!
</syntaxhighlight>
}}
== クラス ==
=== ユーザー定義クラス ===
==== 都市間の大圏距離 ====
[[Go/メソッドとインターフェース]]の都市間の大圏距離を求めるメソッドを追加した例を、Rubyに移植しました。
;[https://paiza.io/projects/Pr8BO96TMXQCuTybsTm3mg?language=ruby 都市間の大圏距離]:<syntaxhighlight lang=ruby line>
class GeoCoord
attr_accessor :longitude, :latitude
def initialize(longitude, latitude)
@longitude, @latitude = longitude, latitude
end
def to_s()
ew, ns = "東経", "北緯"
long, lat = @longitude, @latitude
ew, long = "西経", -long if long < 0.0
ns, lat = "南緯", -lat if lat < 0.0
"(#{ew}: #{long}, #{ns}: #{lat})"
end
def distance(other)
i, r = Math::PI / 180, 6371.008
Math.acos(Math.sin(@latitude * i) * Math.sin(other.latitude * i) +
Math.cos(@latitude * i) * Math.cos(other.latitude * i) * Math.cos(@longitude * i - other.longitude * i)) * r
end
end
def GeoCoord(longitude, latitude)
GeoCoord.new(longitude, latitude)
end
Sites = {
"東京駅": GeoCoord(139.7673068, 35.6809591),
"シドニー・オペラハウス": GeoCoord(151.215278, -33.856778),
"グリニッジ天文台": GeoCoord(-0.0014, 51.4778),
}
Sites.each{|name, gc|
puts "#{name}: #{gc}"
}
keys, len = Sites.keys, Sites.size
keys.each_with_index{|x, i|
y = keys[(i + 1) % len]
puts "#{x} - #{y}: #{Sites[x].distance(Sites[y])} [km]"
}
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
東京駅: (東経: 139.7673068, 北緯: 35.6809591)
シドニー・オペラハウス: (東経: 151.215278, 南緯: 33.856778)
グリニッジ天文台: (西経: 0.0014, 北緯: 51.4778)
東京駅 - シドニー・オペラハウス: 7823.269299386704 [km]
シドニー・オペラハウス - グリニッジ天文台: 16987.2708377249 [km]
グリニッジ天文台 - 東京駅: 9560.546566490015 [km]
</syntaxhighlight>
==== 包含と継承 ====
[[JavaScript/クラス#包含と継承]]を、Rubyに移植しました。
;[https://paiza.io/projects/Zv6cp4tlI3JoV36uEQFetQ?language=ruby 包含と継承]:<syntaxhighlight lang=ruby line>
class Point
def initialize(x = 0, y = 0)
@x, @y = x, y
end
def inspect() "x:#{@x}, y:#{@y}" end
def move(dx = 0, dy = 0)
@x, @y = @x + dx, @y + dy
self
end
end
class Shape
def initialize(x = 0, y = 0)
@location = Point.new(x, y)
end
def inspect() @location.inspect() end
def move(x, y)
@location.move(x, y)
self
end
end
class Rectangle < Shape
def initialize(x = 0, y = 0, width = 0, height = 0)
super(x, y)
@width, @height = width, height
end
def inspect() "#{super()}, width:#{@width}, height:#{@height}" end
end
rct = Rectangle.new(12, 32, 100, 50)
p ["rct=", rct]
p ['rct.instance_of?( Rectangle ) => ', rct.instance_of?(Rectangle)]
p ['rct.instance_of?( Shape ) => ', rct.instance_of?(Shape)]
p ['rct.instance_of?( Point ) => ', rct.instance_of?(Point)]
rct.move(11, 21)
p ["rct=", rct]
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
["rct=", x:12, y:32, width:100, height:50]
["rct.instance_of?( Rectangle ) => ", true]
["rct.instance_of?( Shape ) => ", false]
["rct.instance_of?( Point ) => ", false]
["rct=", x:23, y:53, width:100, height:50]
</syntaxhighlight>
== 制御構造 ==
'''[[w:制御構造|制御構造]]'''(せいぎょこうぞう、''control flow'')とは、「順次」「分岐」「反復」という基本的な処理のことを言います。
{{コラム|Rubyの真理値|2=
制御構造は「条件式」が真であるか偽であるかによって分岐や反復の振る舞いが変わります。
では「条件式」が真・偽はどの様に決まるのでしょう?
Rubyでは <code>false</code> あるいは <code>nil</code> であると偽、それ以外が真です。
なので <code>0</code> も <code>[]</code>(空のArray) も <code>{}</code>(空のHash)も真です。
}}
=== 条件分岐 ===
Rubyの条件分岐には、[[#if|if]], [[#until|until]] と [[#case|case]]の3つの構文があります。
==== if ====
'''[[w:if|if]]'''は条件式によって実行・否を切り替える構造構文で、評価した式の値を返すので条件演算子でもあります。
;[https://paiza.io/projects/biMpjErLV3TRo004lNGTJg?language=ruby ifの例]:<syntaxhighlight lang="ruby" line>
a = 0.0 / 0.0
if a < 0
puts "minus"
elsif a > 0
puts "plus"
elsif a == 0
puts "zero"
else
puts a
end
puts(
if a < 0
"minus"
elsif a > 0
"plus"
elsif a == 0
"zero"
else
a
end
)
</syntaxhighlight>
;表示結果:<syntaxhighlight lang="text">
NaN
NaN
</syntaxhighlight>
:; elsif節:ifは、オプショナルな elsif 節を設け、条件式が偽であった時に別の条件に合致した処理を実行させることが出来ます。
:; else節:ifは、オプショナルな else 節を設け、条件式が偽であった時に処理を実行させることが出来ます。
: ifは値を返すので、メソッドの実引数に使うことが出来ますし、代入演算の右辺にも使えます。
==== 後置のif ====
Rubyには、Perlのような後置のifがあります。
;[https://paiza.io/projects/M72sxlLRG_k29MK1FmgGgQ?language=ruby 後置のifの例]:<syntaxhighlight lang="ruby">
n = 0
puts "nは0" if n == 0
puts "nは1" if n == 1
</syntaxhighlight>
;表示結果:<syntaxhighlight lang="text">
nは0
</syntaxhighlight>
==== unless文 ====
'''unless文'''(アンレスぶん、''unless statement'')は条件式によって実行・否を切り替える構造構文ですが、ifとは条件式に対する挙動が逆です。
;[https://paiza.io/projects/6EGyb6ObN49cNkz9GEMwGw?language=ruby unless文の例]:<syntaxhighlight lang="ruby" line>
a = 0.0 / 0.0
unless a == 0
puts "Non-zero"
else
puts a
end
</syntaxhighlight>
;表示結果:<syntaxhighlight lang="text">
Non-zero
</syntaxhighlight>
:; else節 : unless文は、オプショナルな else 節を設け、条件式が真であった時に処理を実行させることが出来ます。
::また、unless文は elsif 節は持てません。
==== 後置のunless ====
Rubyには、Perlのような後置のunlessがあります。
;[https://paiza.io/projects/tmKKQgJE8prt7y4MbX0wvQ?language=ruby 後置のunlessの例]:<syntaxhighlight lang="ruby">
n = 0
puts "nは0" unless n == 0
puts "nは1" unless n == 1
</syntaxhighlight>
;表示結果:<syntaxhighlight lang="text">
nは1ではない
</syntaxhighlight>
==== case ====
caseは、複数の条件式によって処理を降る分ける用途の為に用意されています。
;[https://paiza.io/projects/zZwUHb2AzrrL346ReD_p1A?language=ruby caseの例]:<syntaxhighlight lang="ruby" line>
n = 2
case n
when 1
puts "one"
when 2
puts "two"
when 3
puts "three"
else
puts "other"
end
</syntaxhighlight>
;表示結果:<syntaxhighlight lang="text">
two
</syntaxhighlight>
:C言語系のswitch文に慣れた人はbreakがないことに気がつくと思います。Rubyのcaseはfall throughしませんし、fall throughさせる方法もありません。
===== when節が定数でなく式を受付ける事を使ったトリック =====
[[#if|if]]を使ったコードをcaseに書き換えてみましょう。
;[https://paiza.io/projects/2RNFYYNmA4zCuuPJ8mejEw?language=ruby case true トリック]:<syntaxhighlight lang="ruby" line>
a = 0.0 / 0.0
case true
when a < 0
puts "minus"
when a > 0
puts "plus"
when a == 0
puts "zero"
else
puts a
end
</syntaxhighlight>
;表示結果:<syntaxhighlight lang="text">
NaN
</syntaxhighlight>
このコードは when 節の式の値とcaseの式を <code>===</code> で比較し、最初に一致した when に対応する文が実行される事を利用しています。
JavaScriptのswitch文のcase節にも式が使えるので、同じトリックが使えます。 {{See also|JavaScript/制御構造#switch_文の構文}}
=== 繰返し ===
Rubyには、他のプログラミング言語のような[[#繰返し文|繰返し文]]と、[[#イテレーターメソッド|イテレーターメソッド]]があります。
==== 繰返し構文 ====
Rubyの繰返し文には、while文 until for文 と loop文 の4つがあります<ref>do-while文はありません。loopの最後にbreak if 式を設け実現します</ref>。
===== while文 =====
while文(ホワイルぶん、while statement)は条件が'''真'''である間、文を実行しつづけます。
;構文:<syntaxhighlight lang="ruby">
while 条件式 [ do ]
文1
文2
:
文n
end
</syntaxhighlight>
: <code>do</code> は省略できます。
;[https://paiza.io/projects/FMtf9ld-HN4HPgWLNNAvrA?language=ruby while文のコード例]:<syntaxhighlight lang="ruby" line>
i = 0
while i < 5 do
puts i
i += 1
end
</syntaxhighlight>
: 2行目の <code>i < 5</code>が真の間、次の2行を繰返します。
: 4行目の <code>i += 1</code> は <code>i = i + 1</code> の構文糖
;実行結果:<syntaxhighlight lang="text">
0
1
2
3
4
</syntaxhighlight>
===== until =====
until(アンティルぶん、until statement)は条件が'''偽'''である間、文を実行しつづけます。while文とは条件に対する挙動が逆です。
;構文:<syntaxhighlight lang="ruby">
until 条件式 [ do ]
文1
文2
:
文n
end
</syntaxhighlight>
: <code>do</code> は省略できます。
;[https://paiza.io/projects/eAvLT3L3hXe2WJsgqYPWsw?language=ruby untilのコード例]:<syntaxhighlight lang="ruby" line>
i = 0
until i == 3 do
puts i
i += 1
end
</syntaxhighlight>
: 2行目の <code>i == 3</code>が偽の間、次の2行を繰返します。
;実行結果:<syntaxhighlight lang="text">
0
1
2
</syntaxhighlight>
===== for文 =====
Rubyにもfor文がありますが、多くの言語で[[W:Froeach文|froeach文]]と呼ばれるもので、C言語系の<code>for (;;)</code>とは異なります。
;for文の構文:<syntaxhighlight lang="ruby">
for 変数 in コレクション
文
end
</syntaxhighlight>
:コレクションは Range, Array, Hash など内部構造を持つオブジェクトです。
==== Rangeオブジェクトとfor文 ====
Rangeオブジェクトは、整数の区間を表し範囲演算子 <code>開始 ... 終了</code> で生成します。
;コード:<syntaxhighlight lang="ruby">
rng = 1..3
puts rng.class
for n in rng do
puts "テキスト";
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Range
テキスト
テキスト
テキスト
</syntaxhighlight>
==== Arrayオブジェクトとfor文 ====
Arrayオブジェクトは、任意の Ruby オブジェクトを要素として持つことができます。
配列式<code>[要素1, 要素2, … 要素n]</code> で生成します。
;[https://paiza.io/projects/zwRG10FKO8uQf3tv72C9NQ?language=ruby コード]:<syntaxhighlight lang="ruby">
animals = ["ネコ", "金魚", "ハムスター"]
puts animals.class
for animal in animals do
puts "動物 #{animal}"
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
動物 ネコ
動物 金魚
動物 ハムスター
</syntaxhighlight>
==== Hashオブジェクトとfor文 ====
Hashオブジェクトは、任意の Ruby オブジェクトをキーに、任意の Ruby オブジェクトを値に持つことができる連想配列です。
Hash式<code>{キー1 => 値1, キー2 => 値2, キーn => 値n}</code> で生成します。
また、キーが Symbol の場合
Hash式<code>{キー1: 値1, キー2: 値2, キーn: 値n}</code> で生成することが出来ます。
;[https://paiza.io/projects/CeZa9Pg-HLS2I1ijggGkYw?language=ruby コード]:<syntaxhighlight lang="ruby">
animals = {cat: "ネコ", gold_fish: "金魚", hamster: "ハムスター"}
puts animals.class
for en, animal in animals do
puts "動物 #{en}: #{animal}"
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Hash
動物 cat: ネコ
動物 gold_fish: 金魚
動物 hamster: ハムスター
</syntaxhighlight>
このように、Rubyのfor文は多様なコレクションを受け付けます。
===== loop文 =====
loop文(ループぶん、loop statement)は永久ループを提供します。
;構文:<syntaxhighlight lang="ruby">
until [ do ]
文1
文2
:
文n
end
</syntaxhighlight>
;[https://paiza.io/projects/ZB-Ikm3W8SOoKLTlGU161Q?language=ruby loop文のコード例]:<syntaxhighlight lang="ruby" line>
i = 1
loop
puts "%b" % i
i <<= 1
break if i > 2**80
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
0b1
0b10
0b100
0b1000
0b10000
0b100000
0b1000000
0b10000000
0b100000000
</syntaxhighlight>
:5行目の、<code>break if i > 2**80</code>でループを脱出するようにしています。この様に break や return あるいは例外が上がらないとループは永久に終わりません。
:このコードは、Rubyにはない do-while文を模倣する例にもなっています。
==== イテレーターメソッド ====
===== eachメソッド =====
上述 for を使った配列の処理と、同じ処理を、次のようにコレクションの<code>each</code>メソッドを使っても書けます。
;[https://paiza.io/projects/GEmXBCX8GIC27X5U1F1jjw?language=ruby コード]:<syntaxhighlight lang="ruby">
rng = 1..3
puts rng.class
rng.each do
puts "テキスト";
end
animals = ["ネコ", "金魚", "ハムスター"]
animals.each do |animal|
puts "ペット:#{animal}"
end
animals = {cat: "ネコ", gold_fish: "金魚", hamster: "ハムスター"}
puts animals.class
animals.each do |en, animal|
puts "動物 #{en}: #{animal}"
end
</syntaxhighlight>
:実行結果:<syntaxhighlight lang="text">
Range
テキスト
テキスト
テキスト
ペット:ネコ
ペット:金魚
ペット:ハムスター
Hash
動物 cat: ネコ
動物 gold_fish: 金魚
動物 hamster: ハムスター
</syntaxhighlight>
===== Integer#times =====
Integer#timesは与えられたブロックをオブジェクトの示す整数値回くりかえします。
:コード<syntaxhighlight lang="ruby">
3.times{ puts 'Hello, world!' }
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Hello, world!
Hello, world!
Hello, world!
</syntaxhighlight>
;繰返したい処理が2行以上ある場合:<syntaxhighlight lang="ruby">
3.times {
puts 'Hello'
puts 'World'
puts ''
}
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Hello
World
Hello
World
Hello
World
</syntaxhighlight>
;[https://paiza.io/projects/tycqR9lC1dCY_rWwjGhYvA?language=ruby ループ変数を使た例]:<syntaxhighlight lang="ruby">
3.times do |i|
puts "#{i}の倍は#{2 * i}"
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
0の倍は0
1の倍は2
2の倍は4
</syntaxhighlight>
;ブロックを伴わないtimesメソッド:<syntaxhighlight lang="ruby">
iter = 3.times
puts iter.class
puts iter.next # 0
puts iter.next # 1
puts iter.next # 2
# puts iter.next # `next': StopIteration: iteration reached an end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Enumerator
0
1
2
</syntaxhighlight>
: Integer#times にブロックを渡さないと、Enumeratorオブジェクトが返ります。
: Enumeratorオブジェクトは外部イテレーターと呼ばれnextメソッドで反復を行えます。
== 高階関数 ==
=== lambda ===
無名関数を定義するにはKernel.#lambdaを使用します。Proc.newも近い機能を提供しますが、lambda のほうがより厳密で、引数の数が異なるって場合エラーとなります。
<syntaxhighlight lang="ruby">
lambda {|x, y| x + y }[2, 3] # => 5
</syntaxhighlight>
lambdaが返すProcオブジェクトにアクセスするにはブラケットを使用します。callメソッドを呼んでも同じことです。
== HTTPクライアント ==
open-uriを使用すると簡単ですが、より高度なインタフェースが必要な場合はNet::HTTPを使用します。
<syntaxhighlight lang="ruby">
require 'open-uri'
puts open('http://www.example.com/').read
</syntaxhighlight>
open-uriは組み込みのopenメソッド(Kernel.#open)をオーバーライドします。ワンライナーで書くこともできます。
<syntaxhighlight lang="console">
% ruby -ropen-uri -e 'puts open(ARGV.shift).read' http://www.example.com/
</syntaxhighlight>
ARGVはコマンドライン引数の配列、Array#shiftメソッドは最初の要素を取り出します。
== 応用 ==
{{進捗状況}}
* [[Ruby on Rails]] {{進捗|00%|2022-06-07}} 0%
== 脚註 ==
<references />
{{スタブ}}
[[Category:Ruby|*]]
[[Category:プログラミング言語]]
{{NDC|007.64}}
5fak24smq3xz5r8qxgrp9f12p8qf7ai
205713
205681
2022-07-23T00:44:40Z
Ef3
694
/* lazy */ イテレーション メソッドでメソッド チェインを使うと、中間結果としてに大きなコレクションができてしまいます。 lazyを使うと、遅延評価を行いこれを避けることができます。 Enumableを[[プログラミング/ジェネレター]]に変換していると捉えることができます。
wikitext
text/x-wiki
{{Pathnav|メインページ|工学|情報技術|プログラミング|frame=1}}
{{Wikipedia}}
本書は、[[w:Ruby|Ruby]]のチュートリアルです。
Rubyは、比較的習得が容易なオブジェクト指向スクリプティング言語です。
[[w:まつもとゆきひろ|まつもとゆきひろ]]によって開発されました。
[[Ruby on Rails]]の記述言語として選ばれたことで有名になりましたが、ウェブアプリケーション以外にもシステム管理やネットワークアプリケーションなどさまざまな用途に用いられます。
__TOC__
== 準備 ==
=== rubyインタープリターの準備 ===
まずはrubyインタープリターを用意しましょう<ref>インタープリターを <code>ruby</code>、スクリプティング言語を <code>Ruby</code> とかき分けます。</ref>。
インタープリターとは、あなたが書いたスクリプトを読んでそれを実行してくれるソフトウェアです。
[https://www.ruby-lang.org/ja/ Ruby公式サイト]の「[https://www.ruby-lang.org/ja/downloads/ ダウンロード]」ページから、
それぞれの環境に合ったインタープリターをダウンロードして下さい。
具体的なインストール手順は環境によって違うので、「[https://www.ruby-lang.org/ja/documentation/installation/ Rubyのインストール]」を参照して下さい。
準備ができたら、試しにコマンドラインからインタープリターを呼び出してみましょう。
;バージョンを確かめる:<syntaxhighlight lang="console">
% ruby --version
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux-gnu]
</syntaxhighlight>
環境によってバージョンが異なると思います。
2022年6月現在、ruby-1.x は全てEoL(End-of-Life;サポート終了)、
ruby-2.x は 2.7 がセキュリティメンテナンス、それ以外はEOL、
ruby-3.x は 3.0 - 3.1 がノーマルメンテナンス、3.2 がプレビューです<ref>[https://www.ruby-lang.org/en/downloads/branches/ Ruby Maintenance Branches]</ref>。
もしご自身の環境の ruby のバージョンが既にサポート終了しているのであれば、サポートされているバージョンへのアップデートを検討してください。
本書では ruby-2.7 以降を想定しています。
;ミススペルすると:<syntaxhighlight lang="console">
% ruby --vertion
ruby: invalid option --vertion (-h will show valid options) (RuntimeError)
</syntaxhighlight>
versionの綴りが違うとこの様なメッセーが出ます。案内に従って <code>ruby -h</code> を実行してみましょう。
;コマンドラインオプションの説明:<syntaxhighlight lang="console">
% ruby -h
Usage: ruby [switches] [--] [programfile] [arguments]
-0[octal] specify record separator (\0, if no argument)
-a autosplit mode with -n or -p (splits $_ into $F)
-c check syntax only
-Cdirectory cd to directory before executing your script
-d set debugging flags (set $DEBUG to true)
-e 'command' one line of script. Several -e's allowed. Omit [programfile]
-Eex[:in] specify the default external and internal character encodings
-Fpattern split() pattern for autosplit (-a)
-i[extension] edit ARGV files in place (make backup if extension supplied)
-Idirectory specify $LOAD_PATH directory (may be used more than once)
-l enable line ending processing
-n assume 'while gets(); ... end' loop around your script
-p assume loop like -n but print line also like sed
-rlibrary require the library before executing your script
-s enable some switch parsing for switches after script name
-S look for the script using PATH environment variable
-v print the version number, then turn on verbose mode
-w turn warnings on for your script
-W[level=2|:category] set warning level; 0=silence, 1=medium, 2=verbose
-x[directory] strip off text before #!ruby line and perhaps cd to directory
--jit enable JIT for the platform, same as --yjit (experimental)
--mjit enable C compiler-based JIT compiler (experimental)
--yjit enable in-process JIT compiler (experimental)
-h show this message, --help for more info
</syntaxhighlight>
これもバージョンによって表示が違います。
<!---
其々のコマンドラインオプションの説明は割愛しましたが、ワンライナーを書くときに役に立つ -nle など代表的な組合わせをコラム(?)で紹介すべきでしょう
--->
=== Hello, World! ===
他の多くのチュートリアルがそうであるように、
私たちもまずはRubyの世界にあいさつすることから始めましょう。
''hello.rb''というファイルを作り(Rubyではスクリプトファイルに''.rb''という拡張子を付けることが通例となっています)、次のように書いて保存して下さい。
;[https://paiza.io/projects/hz-ldiAi0zhpaSqjteWLXw?language=cpp hello.rb]:<syntaxhighlight lang=ruby>
puts 'Hello, World!'
</syntaxhighlight>
それではこのスクリプトを実行してみましょう。コマンドラインから次のようにタイプして下さい。
:<syntaxhighlight lang="console">
% ruby hello.rb
Hello, World!
%
</syntaxhighlight>
この1行のスクリプトは、メソッド<code>puts</code> に文字リテラル<code>'Hello, World!'</code>を渡し呼出しています。
<!--- https://techracho.bpsinc.jp/hachi8833/2020_11_27/26969
=== 文字コード ===
ruby では日本語表示できますが、ソースコードの文字コードを UTF-8 に設定する必要があります。
標準的なテキストエディタなら、メニューバーにある「ファイル」のコマンド一覧に「文字コードを指定して保存」のようなコマンドがあるので、それで UTF-8 を指定して保存してください。
コード例
<syntaxhighlight lang=ruby>
# hello.rb
s = 'こんにちは、世界'
puts s
</syntaxhighlight>
実行例
こんにちは、世界
--->
== irb ==
irb(Interactive Ruby) は、Rubyを対話的に実行するためのコマンドシェル<ref>REPL (Read Eval Print Loop)</ref>です<ref>irb は ruby インタープリターと違いスクリプトの実行には必須なプログラムではありませんが、対話的にコードを評価出来るのが便利です。</ref>。
;irbで 'Hello, World!':<syntaxhighlight lang="irb" line>
% irb
irb(main):001:0> puts "Hello, world!"
Hello, world!
=> nil
irb(main):002:0> exit
%
</syntaxhighlight>
# シェルから irb を起動
# <code>puts "Hello, world!"</code>と入力し、エンターを押して評価しています。
# <code>Hello, world!</code> は <code>puts</code> メソッドの出力です。
# <code>=> nil</code> は、<code>puts</code> メソッドの戻値です。
# <code>exit</code> で irb を終了しています。
# シェルのプロンプトに復帰
=== irbのインストール ===
環境によっては、rubyインタプリターとは別にirbを追加でインストールしないと、irbは使えない場合もあります。
もし、<code>irb</code> がインストールされていないのであれば、実行環境のパッケージマネージャーで irb を検索しインストールしてください。
また、[[W:Rubygems|rubygems]] にも [https://rubygems.org/gems/irb irb のパッケージ]があるので
:<syntaxhighlight lang=csh>
% sudo gem install irb
</syntaxhighlight>
でインストールできます。
<!-- rubygems の解説も項目を改めて(?)必要 -->
== 変数 ==
オブジェクトを変数に代入するには
:<syntaxhighlight lang="ruby">
変数名 = オブジェクト
</syntaxhighlight>
の様に代入演算子 <code>=</code> を使います。
;[https://paiza.io/projects/x1_UlCeb1PtW8pG8Xi-i-g?language=ruby 変数へのオブジェクトの代入と参照]:<syntaxhighlight lang="ruby" line>
a = 1
p a
a = "abc"
p a
a = [1, 2, 3]
p a
b = a
p b
b[1] = 999
p a
</syntaxhighlight>
;表示結果:<syntaxhighlight lang="text">
1
"abc"
[1, 2, 3]
[1, 2, 3]
[1, 999, 3]
</syntaxhighlight>
# 変数 <var>a</var> に整数 1 を代入
# メソッド p に <var>a</var> を引数とした呼出し
#* 変数 <var>a</var> を使った参照
#* <code>1</code> が表示される
# 変数 <var>a</var> に文字列 "abc" を代入
# <code>"abc"</code> が表示される
# 変数 <var>a</var> に配列 [1, 2, 3] を代入
# <code>[1, 2, 3]</code> が表示される
# 変数 <var>b</var> に変数 <var>a</var> が参照しているオブジェクトを代入
#* ここでは、配列 [1, 2, 3]
# やはり、<code>[1, 2, 3]</code> が表示される
# 変数 <var>b</var> の参照している配列の1番目の要素に 999 を代入
#* これは変数ではなく配列の要素への代入
#* 配列の先頭は0番目
# 変数 <var>a</var> を使って参照すると
#* 1番目の要素が 999 に書換わって <code>[1, 999, 3]</code> となっている
代入は、オブジェクトに後から参照するための名前(変数名)をつけることに他なりません。
このため、変数の参照するオブジェクトを別の変数に代入すると「別名」を作ることになります。
{{コラム|puts メソッドと p メソッド|2=
putsメソッドはオブジェクトにto_sメソッドで適用した結果を表示します。
これに対し、pメソッドはオブジェクトにinspectメソッドで適用した結果を表示します。
;[https://paiza.io/projects/uZV53RJGbr3FKbscJc8tiw?language=ruby putsとp]:<syntaxhighlight lang="ruby">
puts "Hello, world!"
p "Hello, world!"
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
Hello, world!
"Hello, world!"
</syntaxhighlight>
}}
== オブジェクト ==
Ruby では、多くのものがオブジェクトで、オブジェクトは1つのクラスに属しています。
他のオブジェクト指向プログラミング言語では、整数や文字列などはメソッドをプリミティブとして別扱いし、
ラッパーをオブジェクトを用意することでメソッドがないことを補っていますが、
Ruby では整数や文字列など基本的なデータ型もオブジェクトでメソッドを持ちます。
=== オブジェクトのクラスを調べる ===
オブジェクトのクラスを調べるには、 .class メソッドを使います。
<syntaxhighlight lang="irb" line>
$ irb
irb(main):001:0> 0.class
=> Integer
irb(main):002:0> "abc".class
=> String
irb(main):003:0> [1,2,3].class
=> Array
irb(main):004:0> ({a:2, b:3, c:5, d:7}).class
=> Hash
irb(main):005:0> (1...99).class
irb(main):005:0> (1...99).class
=> Range
</syntaxhighlight>
=== 全てのクラスのスーパークラス Object ===
Object は全てのクラスのスーパークラスです。
== 式と演算子 ==
式 (expression) や演算子 (operator) について説明します。
Rubyにはい可能な演算子があります。
* 代入演算子
* 比較演算子
* 算術演算子
* ビット演算子
* 論理演算子
* 文字列演算子
* 条件(三項)演算子
* カンマ演算子
=== オブジェクトとメソッド演算子 ===
演算子はオブジェクトのメソッドの特殊な形で、二項演算子の場合は左辺のオブジェクトがレシーバーになります。
<pre>
Object(==, ===, =~)
Array(+, -, *, &, <<, <=>, ==, [], []=)
Hash(==, ===, [], []=)
String(%, *, +, <<, <=>, ==, =~, [], []=)
Numeric(+, -, <=>)
Float(+, -, *, /, %, **, ==, <, >, <=, >=, <=>)
Integer(+, -, *, /, %, **, ==, <=, >=, <=>, <<, >>, [], &, |, ^, ~, **)
Range(==, ===)
Regexp(==, ===, =~)
</pre>
=== 演算子の優先順位と結合方向 ===
演算子には優先順位 (結合力の強さ) と結合方向があります。
a + b - c
は
( a + b ) - c
と同じ(加減算は左結合)。
a + b * c
は
a + ( b * c )
と同じ(乗除算は加減算より優先順位が高い)。
a = b = 0
は
a = ( b = 0 )
と同じ(代入は右結合)。
<!-- ここに演算子の優先順位と結合方向の表を挿入します -->
== 様々なクラス・オブジェクトとリテラル ==
Ruby では、変数に束縛することが出来るものは全てオブジェクトです。
オブジェクトは必ず1つのクラスに属しています。
全てのクラスにリテラル表現があるわけではありませんが、組込みライブラリーの主要なクラスにはリテラル表現が用意されています。
=== 数値クラス ===
数値クラスは整数クラスあるいは浮動小数点数クラスです。
;[https://paiza.io/projects/Jo78O4vlCkQOar1YYB3Erg?language=ruby 数値クラス]:<syntaxhighlight lang="ruby">
p 2 + 6
p 2.0 + 6
p 2 + 6.0
p 2.0 + 6.0
p 2.class
p 2.methods
p 2.0.class
p 2.0.methods
</syntaxhighlight>
;表示結果:<syntaxhighlight lang="text">
8
8.0
8.0
8.0
Integer
[:anybits?, :nobits?, :downto, :times, :pred, :pow, :**, :<=>, :<<, :>>, :<=, :>=, :==, :===, :next, :lcm, :digits, :[], :~, :gcd, :gcdlcm, :-@, :upto, :%, :chr, :&, :*, :+, :bit_length, :inspect, :-, :/, :integer?, :even?, :odd?, :size, :succ, :<, :>, :ord, :to_int, :to_s, :to_i, :to_f, :to_r, :div, :divmod, :fdiv, :^, :coerce, :modulo, :remainder, :abs, :magnitude, :zero?, :floor, :ceil, :round, :truncate, :numerator, :|, :denominator, :rationalize, :allbits?, :dup, :arg, :real?, :+@, :rect, :polar, :real, :imaginary, :imag, :abs2, :angle, :phase, :conjugate, :rectangular, :to_c, :conj, :infinite?, :finite?, :eql?, :singleton_method_added, :quo, :clone, :i, :nonzero?, :step, :positive?, :negative?, :between?, :clamp, :singleton_class, :itself, :taint, :tainted?, :untaint, :untrust, :untrusted?, :trust, :methods, :singleton_methods, :protected_methods, :private_methods, :public_methods, :instance_variables, :instance_variable_get, :instance_variable_set, :instance_variable_defined?, :remove_instance_variable, :instance_of?, :kind_of?, :is_a?, :display, :hash, :public_send, :class, :frozen?, :tap, :then, :yield_self, :extend, :method, :public_method, :singleton_method, :define_singleton_method, :=~, :!~, :nil?, :respond_to?, :freeze, :object_id, :send, :to_enum, :enum_for, :__send__, :!, :__id__, :instance_eval, :instance_exec, :!=, :equal?]
Float
[:arg, :-@, :**, :<=>, :<=, :>=, :==, :===, :angle, :phase, :positive?, :nan?, :infinite?, :finite?, :next_float, :prev_float, :eql?, :%, :*, :+, :inspect, :-, :/, :<, :>, :to_int, :to_s, :to_i, :to_f, :to_r, :divmod, :fdiv, :quo, :coerce, :modulo, :abs, :magnitude, :zero?, :floor, :ceil, :round, :truncate, :numerator, :denominator, :rationalize, :negative?, :hash, :dup, :real?, :+@, :rect, :polar, :real, :imaginary, :imag, :abs2, :conjugate, :rectangular, :to_c, :conj, :integer?, :singleton_method_added, :div, :clone, :i, :remainder, :nonzero?, :step, :between?, :clamp, :singleton_class, :itself, :taint, :tainted?, :untaint, :untrust, :untrusted?, :trust, :methods, :singleton_methods, :protected_methods, :private_methods, :public_methods, :instance_variables, :instance_variable_get, :instance_variable_set, :instance_variable_defined?, :remove_instance_variable, :instance_of?, :kind_of?, :is_a?, :display, :public_send, :class, :frozen?, :tap, :then, :yield_self, :extend, :method, :public_method, :singleton_method, :define_singleton_method, :=~, :!~, :nil?, :respond_to?, :freeze, :object_id, :send, :to_enum, :enum_for, :__send__, :!, :__id__, :instance_eval, :instance_exec, :!=, :equal?]
</syntaxhighlight>
浮動小数点数リテラルは、小数点以下が 0 でも 6. の様に 0 を'''省略できません'''。
=== 文字列クラス ===
文字列リテラルは <code>'</code> あるいは <code>"</code> で囲います。
上の例の、<code>'Hello World!'</code> が文字リテラルの一例です。
;[https://paiza.io/projects/d-FL4g4crwTR65Uy51jWXg?language=ruby 文字列クラス]:<syntaxhighlight lang="ruby">
p "2" + "6"
p "abc" * 6
p "→%d" % 6
p "2".concat "6"
p "abc".class
p "abc".methods
</syntaxhighlight>
;表示結果:<syntaxhighlight lang="text">
"26"
"abcabcabcabcabcabc"
"→6"
"26"
String
[:unicode_normalized?, :encode!, :unicode_normalize, :ascii_only?, :unicode_normalize!, :to_r, :encode, :to_c, :include?, :%, :*, :+, :unpack, :unpack1, :count, :partition, :+@, :-@, :<=>, :<<, :sum, :==, :===, :next, :=~, :[], :[]=, :empty?, :casecmp, :eql?, :insert, :casecmp?, :match?, :bytesize, :match, :next!, :succ!, :index, :upto, :replace, :rindex, :chr, :clear, :byteslice, :getbyte, :setbyte, :freeze, :scrub, :scrub!, :dump, :inspect, :intern, :upcase, :downcase, :capitalize, :swapcase, :upcase!, :undump, :length, :size, :downcase!, :succ, :swapcase!, :hex, :capitalize!, :split, :chars, :oct, :grapheme_clusters, :concat, :codepoints, :lines, :bytes, :to_str, :end_with?, :start_with?, :reverse, :reverse!, :sub, :to_s, :to_i, :to_f, :rjust, :center, :prepend, :crypt, :ord, :chomp, :strip, :to_sym, :ljust, :delete_prefix, :delete_suffix, :lstrip, :gsub, :scan, :chomp!, :sub!, :gsub!, :rstrip, :delete_prefix!, :chop, :lstrip!, :rstrip!, :chop!, :delete_suffix!, :strip!, :tr_s, :delete, :squeeze, :tr!, :tr, :delete!, :squeeze!, :each_line, :each_byte, :tr_s!, :each_codepoint, :each_grapheme_cluster, :slice, :slice!, :each_char, :encoding, :force_encoding, :b, :valid_encoding?, :rpartition, :hash, :between?, :clamp, :<=, :>=, :<, :>, :singleton_class, :dup, :itself, :taint, :tainted?, :untaint, :untrust, :untrusted?, :trust, :methods, :singleton_methods, :protected_methods, :private_methods, :public_methods, :instance_variables, :instance_variable_get, :instance_variable_set, :instance_variable_defined?, :remove_instance_variable, :instance_of?, :kind_of?, :is_a?, :display, :public_send, :class, :frozen?, :tap, :then, :yield_self, :extend, :clone, :method, :public_method, :singleton_method, :define_singleton_method, :!~, :nil?, :respond_to?, :object_id, :send, :to_enum, :enum_for, :__send__, :!, :__id__, :instance_eval, :instance_exec, :!=, :equal?]
</syntaxhighlight>
文字オブジェクトの <code>+</code> 演算子は、concatメソッドの別名です。
この様に、同じ演算子でも左辺に来るオブジェクトによって行われる処理が変わります。
==== 式展開 ====
<code>"</code> で囲んだ文字列リテラル中には <code>#{ 式 }</code>の形で式を埋込む事ができます。
<code>'</code> で囲んだ文字列リテラル中では <code>#{ 式 }</code>の形で式は展開されません。
;[https://paiza.io/projects/Jo78O4vlCkQOar1YYB3Erg?language=ruby 文字列リテラルに式を埋込んだ例]:<syntaxhighlight lang="ruby">
</syntaxhighlight>
;表示結果:<syntaxhighlight lang="text">
</syntaxhighlight>
;[https://paiza.io/projects/7Xvz_1StHFRL0ozCvKnwMw?language=ruby 文字列リテラルに式を埋込んだ例]:<syntaxhighlight lang="ruby">
p "12 + 8 = #{12 + 8}"
p %|"abc".upcase = #{"abc".upcase}|
</syntaxhighlight>
;表示結果:<syntaxhighlight lang="text">
"12 + 8 = 20"
"\"abc\".upcase = ABC"
</syntaxhighlight>
=== 文字リテラル ===
[https://paiza.io/projects/-9rsAGNcN-m-PN_ZhffwDg?language=ruby 例]
p ?a
p ?字
p ?😈
p ?😈.class
実行結果
"a"
"字"
"😈"
String
=== 正規表現クラスと正規表現リテラル ===
=== 配列クラスと配列式 ===
=== ハッシュクラスとハッシュ式 ===
=== 範囲クラスと範囲演算子式 ===
範囲演算子式は、範囲クラス(Range)のリテラルで{{code|開始 .. 終了}}の形式です。
<!--- Rangeのeachメソッドは perl 等の[[W:Foreach文|foreach文]]にあたるブロック付きメソッド呼び出しのイテレーターです。-->
;[https://paiza.io/projects/xBwKk7uZ1WKba2Ti2Qy_rQ?language=ruby Rangeオブジェクト]:<syntaxhighlight lang="ruby">
r = (0..9)
p r
p r.class
r.each {|x| p x }
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
0..9
Range
0
1
2
3
4
5
6
7
8
9
</syntaxhighlight>
:putsメソッドはオブジェクトにto_sメソッドで適用した結果を表示するのに対し、pメソッドはオブジェクトにinspectメソッドで適用した結果を表示します。
;[https://paiza.io/projects/uZV53RJGbr3FKbscJc8tiw?language=ruby putsとp]:<syntaxhighlight lang="ruby">
puts "Hello, world!"
p "Hello, world!"
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
Hello, world!
"Hello, world!"
</syntaxhighlight>
=== シンボル ===
=== %記法 ===
== メソッド ==
'''メソッド'''(''method'')は、処理の塊に名前を付けて再利用する仕組みです。
一般的なプログラミング言語でのサブルーチン・プロシージャあるいは命令と呼ばれるものと共通する特徴を持ちますが、'''主語'''に相当するオブジェクトがあるところが異なります。
メソッドはキーワード <code>def</code> を使って定義します。
;[https://paiza.io/projects/gpNItFmxOxwCATYVVGX00w?language=ruby コード]:<syntaxhighlight lang="ruby" line>
def hello()
puts "Hell World!"
end
hello()
self.hello()
</syntaxhighlight>
;表示結果:<syntaxhighlight lang="text">
Hell World!
Hell World!
</syntaxhighlight>
# メソッド <code>hello</code> の定義の開始
# メソッド <code>hello</code> の本体
# メソッド <code>hello</code> の定義の終了
#
# メソッド <code>hello</code> の呼出し
# メソッド <code>hello</code> を <code>self</code>を明示して呼出し
=== 仮引数を伴ったメソッド ===
メソッドには、仮引数としてオブジェクトを渡すことができます。
;[https://paiza.io/projects/G3yTvRLuEW3VEsQ1H43YMg?language=ruby 仮引数を伴ったメソッド]:<syntaxhighlight lang="ruby">
def show_sum(a, b)
puts a + b
end
show_sum(1, 3)
show_sum(5, 2)
</syntaxhighlight>
;表示結果:<syntaxhighlight lang="text">
4
7
</syntaxhighlight>
=== 戻り値を返すメソッド ===
メソッドは、戻り値としてオブジェクトを返すことができます。
;[https://paiza.io/projects/-qE9Wq6ngZC1XPeDX8C0LA?language=ruby 戻り値を返すメソッドの例]:<syntaxhighlight lang="ruby">
def get_sum(a, b)
return a + b
end
puts get_sum(1, 3)
puts get_sum(5, 2)
</syntaxhighlight>
;表示結果:<syntaxhighlight lang="text">
4
7
</syntaxhighlight>
=== 変数のスコープ ===
メソッドの中で作られた変数のスコープはメソッドローカルです。
;[https://paiza.io/projects/lIpUl1uIDKCop6QzwVEDSg?language=ruby 変数のスコープ]:<syntaxhighlight lang="ruby" line>
a = 100
x = 99
def get_sum(a, b)
x = 0
return a + b
end
puts [a,x]
puts get_sum(1, 3)
puts get_sum(5, 2)
</syntaxhighlight>
;表示結果:<syntaxhighlight lang="text">
100
99
4
7
</syntaxhighlight>
: 1行目で 100 が代入された変数 a は、メソッド get_sum の仮引数 a とは関係なく 100 のまま
: 2行目で 99 が代入された変数 x は、メソッド get_sum の中で 0 が代入された x とは関係なく 99 のまま
この様に、メソッドの中からはメソッドの外の変数を(仮引数を介すなどの手段を取らない限り)参照出来ません。
また、メソッドをスコープとする変数をメソッドの呼出し元から参照できません。
{{コラム|Rubyと変数宣言|2=
「メソッドの中で作られた」と、やや歯切れの悪い表現ですが、Ruby では変数を「宣言」しません。
強いて言うならば、最初の代入が変数の宣言です。}}
<!--- 以下は項を変えて解説が必要
グローバル変数
クラス変数
インスタンス変数
特殊変数
--->
{{コラム|メソッドの引数リストを囲む括弧の省略|2=
メソッドの引数リストを囲む括弧 <code>p(</code> と <code>)</code> は、曖昧さのない場合は省略可能です。
上の例は、<code>puts(s)</code>と書く代わりに、<code>put s</code> と書く事ができます。
;コード:<syntaxhighlight lang="ruby">
s = 'Hello World!'
puts s
</syntaxhighlight>
;表示結果:<syntaxhighlight lang="text">
Hello World!
</syntaxhighlight>
}}
== クラス ==
=== ユーザー定義クラス ===
==== 都市間の大圏距離 ====
[[Go/メソッドとインターフェース]]の都市間の大圏距離を求めるメソッドを追加した例を、Rubyに移植しました。
;[https://paiza.io/projects/Pr8BO96TMXQCuTybsTm3mg?language=ruby 都市間の大圏距離]:<syntaxhighlight lang=ruby line>
class GeoCoord
attr_accessor :longitude, :latitude
def initialize(longitude, latitude)
@longitude, @latitude = longitude, latitude
end
def to_s()
ew, ns = "東経", "北緯"
long, lat = @longitude, @latitude
ew, long = "西経", -long if long < 0.0
ns, lat = "南緯", -lat if lat < 0.0
"(#{ew}: #{long}, #{ns}: #{lat})"
end
def distance(other)
i, r = Math::PI / 180, 6371.008
Math.acos(Math.sin(@latitude * i) * Math.sin(other.latitude * i) +
Math.cos(@latitude * i) * Math.cos(other.latitude * i) * Math.cos(@longitude * i - other.longitude * i)) * r
end
end
def GeoCoord(longitude, latitude)
GeoCoord.new(longitude, latitude)
end
Sites = {
"東京駅": GeoCoord(139.7673068, 35.6809591),
"シドニー・オペラハウス": GeoCoord(151.215278, -33.856778),
"グリニッジ天文台": GeoCoord(-0.0014, 51.4778),
}
Sites.each{|name, gc|
puts "#{name}: #{gc}"
}
keys, len = Sites.keys, Sites.size
keys.each_with_index{|x, i|
y = keys[(i + 1) % len]
puts "#{x} - #{y}: #{Sites[x].distance(Sites[y])} [km]"
}
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
東京駅: (東経: 139.7673068, 北緯: 35.6809591)
シドニー・オペラハウス: (東経: 151.215278, 南緯: 33.856778)
グリニッジ天文台: (西経: 0.0014, 北緯: 51.4778)
東京駅 - シドニー・オペラハウス: 7823.269299386704 [km]
シドニー・オペラハウス - グリニッジ天文台: 16987.2708377249 [km]
グリニッジ天文台 - 東京駅: 9560.546566490015 [km]
</syntaxhighlight>
==== 包含と継承 ====
[[JavaScript/クラス#包含と継承]]を、Rubyに移植しました。
;[https://paiza.io/projects/Zv6cp4tlI3JoV36uEQFetQ?language=ruby 包含と継承]:<syntaxhighlight lang=ruby line>
class Point
def initialize(x = 0, y = 0)
@x, @y = x, y
end
def inspect() "x:#{@x}, y:#{@y}" end
def move(dx = 0, dy = 0)
@x, @y = @x + dx, @y + dy
self
end
end
class Shape
def initialize(x = 0, y = 0)
@location = Point.new(x, y)
end
def inspect() @location.inspect() end
def move(x, y)
@location.move(x, y)
self
end
end
class Rectangle < Shape
def initialize(x = 0, y = 0, width = 0, height = 0)
super(x, y)
@width, @height = width, height
end
def inspect() "#{super()}, width:#{@width}, height:#{@height}" end
end
rct = Rectangle.new(12, 32, 100, 50)
p ["rct=", rct]
p ['rct.instance_of?( Rectangle ) => ', rct.instance_of?(Rectangle)]
p ['rct.instance_of?( Shape ) => ', rct.instance_of?(Shape)]
p ['rct.instance_of?( Point ) => ', rct.instance_of?(Point)]
rct.move(11, 21)
p ["rct=", rct]
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
["rct=", x:12, y:32, width:100, height:50]
["rct.instance_of?( Rectangle ) => ", true]
["rct.instance_of?( Shape ) => ", false]
["rct.instance_of?( Point ) => ", false]
["rct=", x:23, y:53, width:100, height:50]
</syntaxhighlight>
== 制御構造 ==
'''[[w:制御構造|制御構造]]'''(せいぎょこうぞう、''control flow'')とは、「順次」「分岐」「反復」という基本的な処理のことを言います。
{{コラム|Rubyの真理値|2=
制御構造は「条件式」が真であるか偽であるかによって分岐や反復の振る舞いが変わります。
では「条件式」が真・偽はどの様に決まるのでしょう?
Rubyでは <code>false</code> あるいは <code>nil</code> であると偽、それ以外が真です。
なので <code>0</code> も <code>[]</code>(空のArray) も <code>{}</code>(空のHash)も真です。
}}
=== 条件分岐 ===
Rubyの条件分岐には、[[#if|if]], [[#until|until]] と [[#case|case]]の3つの構文があります。
==== if ====
'''[[w:if|if]]'''は条件式によって実行・否を切り替える構造構文で、評価した式の値を返すので条件演算子でもあります。
;[https://paiza.io/projects/biMpjErLV3TRo004lNGTJg?language=ruby ifの例]:<syntaxhighlight lang="ruby" line>
a = 0.0 / 0.0
if a < 0
puts "minus"
elsif a > 0
puts "plus"
elsif a == 0
puts "zero"
else
puts a
end
puts(
if a < 0
"minus"
elsif a > 0
"plus"
elsif a == 0
"zero"
else
a
end
)
</syntaxhighlight>
;表示結果:<syntaxhighlight lang="text">
NaN
NaN
</syntaxhighlight>
:; elsif節:ifは、オプショナルな elsif 節を設け、条件式が偽であった時に別の条件に合致した処理を実行させることが出来ます。
:; else節:ifは、オプショナルな else 節を設け、条件式が偽であった時に処理を実行させることが出来ます。
: ifは値を返すので、メソッドの実引数に使うことが出来ますし、代入演算の右辺にも使えます。
==== 後置のif ====
Rubyには、Perlのような後置のifがあります。
;[https://paiza.io/projects/M72sxlLRG_k29MK1FmgGgQ?language=ruby 後置のifの例]:<syntaxhighlight lang="ruby">
n = 0
puts "nは0" if n == 0
puts "nは1" if n == 1
</syntaxhighlight>
;表示結果:<syntaxhighlight lang="text">
nは0
</syntaxhighlight>
==== unless文 ====
'''unless文'''(アンレスぶん、''unless statement'')は条件式によって実行・否を切り替える構造構文ですが、ifとは条件式に対する挙動が逆です。
;[https://paiza.io/projects/6EGyb6ObN49cNkz9GEMwGw?language=ruby unless文の例]:<syntaxhighlight lang="ruby" line>
a = 0.0 / 0.0
unless a == 0
puts "Non-zero"
else
puts a
end
</syntaxhighlight>
;表示結果:<syntaxhighlight lang="text">
Non-zero
</syntaxhighlight>
:; else節 : unless文は、オプショナルな else 節を設け、条件式が真であった時に処理を実行させることが出来ます。
::また、unless文は elsif 節は持てません。
==== 後置のunless ====
Rubyには、Perlのような後置のunlessがあります。
;[https://paiza.io/projects/tmKKQgJE8prt7y4MbX0wvQ?language=ruby 後置のunlessの例]:<syntaxhighlight lang="ruby">
n = 0
puts "nは0" unless n == 0
puts "nは1" unless n == 1
</syntaxhighlight>
;表示結果:<syntaxhighlight lang="text">
nは1ではない
</syntaxhighlight>
==== case ====
caseは、複数の条件式によって処理を降る分ける用途の為に用意されています。
;[https://paiza.io/projects/zZwUHb2AzrrL346ReD_p1A?language=ruby caseの例]:<syntaxhighlight lang="ruby" line>
n = 2
case n
when 1
puts "one"
when 2
puts "two"
when 3
puts "three"
else
puts "other"
end
</syntaxhighlight>
;表示結果:<syntaxhighlight lang="text">
two
</syntaxhighlight>
:C言語系のswitch文に慣れた人はbreakがないことに気がつくと思います。Rubyのcaseはfall throughしませんし、fall throughさせる方法もありません。
===== when節が定数でなく式を受付ける事を使ったトリック =====
[[#if|if]]を使ったコードをcaseに書き換えてみましょう。
;[https://paiza.io/projects/2RNFYYNmA4zCuuPJ8mejEw?language=ruby case true トリック]:<syntaxhighlight lang="ruby" line>
a = 0.0 / 0.0
case true
when a < 0
puts "minus"
when a > 0
puts "plus"
when a == 0
puts "zero"
else
puts a
end
</syntaxhighlight>
;表示結果:<syntaxhighlight lang="text">
NaN
</syntaxhighlight>
このコードは when 節の式の値とcaseの式を <code>===</code> で比較し、最初に一致した when に対応する文が実行される事を利用しています。
JavaScriptのswitch文のcase節にも式が使えるので、同じトリックが使えます。 {{See also|JavaScript/制御構造#switch_文の構文}}
=== 繰返し ===
Rubyには、他のプログラミング言語のような[[#繰返し文|繰返し文]]と、[[#イテレーターメソッド|イテレーターメソッド]]があります。
==== 繰返し構文 ====
Rubyの繰返し文には、while文 until for文 と loop文 の4つがあります<ref>do-while文はありません。loopの最後にbreak if 式を設け実現します</ref>。
===== while文 =====
while文(ホワイルぶん、while statement)は条件が'''真'''である間、文を実行しつづけます。
;構文:<syntaxhighlight lang="ruby">
while 条件式 [ do ]
文1
文2
:
文n
end
</syntaxhighlight>
: <code>do</code> は省略できます。
;[https://paiza.io/projects/FMtf9ld-HN4HPgWLNNAvrA?language=ruby while文のコード例]:<syntaxhighlight lang="ruby" line>
i = 0
while i < 5 do
puts i
i += 1
end
</syntaxhighlight>
: 2行目の <code>i < 5</code>が真の間、次の2行を繰返します。
: 4行目の <code>i += 1</code> は <code>i = i + 1</code> の構文糖
;実行結果:<syntaxhighlight lang="text">
0
1
2
3
4
</syntaxhighlight>
===== until =====
until(アンティルぶん、until statement)は条件が'''偽'''である間、文を実行しつづけます。while文とは条件に対する挙動が逆です。
;構文:<syntaxhighlight lang="ruby">
until 条件式 [ do ]
文1
文2
:
文n
end
</syntaxhighlight>
: <code>do</code> は省略できます。
;[https://paiza.io/projects/eAvLT3L3hXe2WJsgqYPWsw?language=ruby untilのコード例]:<syntaxhighlight lang="ruby" line>
i = 0
until i == 3 do
puts i
i += 1
end
</syntaxhighlight>
: 2行目の <code>i == 3</code>が偽の間、次の2行を繰返します。
;実行結果:<syntaxhighlight lang="text">
0
1
2
</syntaxhighlight>
===== for文 =====
Rubyにもfor文がありますが、多くの言語で[[W:Froeach文|froeach文]]と呼ばれるもので、C言語系の<code>for (;;)</code>とは異なります。
;for文の構文:<syntaxhighlight lang="ruby">
for 変数 in コレクション
文
end
</syntaxhighlight>
:コレクションは Range, Array, Hash など内部構造を持つオブジェクトです。
==== Rangeオブジェクトとfor文 ====
Rangeオブジェクトは、整数の区間を表し範囲演算子 <code>開始 ... 終了</code> で生成します。
;コード:<syntaxhighlight lang="ruby">
rng = 1..3
puts rng.class
for n in rng do
puts "テキスト";
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Range
テキスト
テキスト
テキスト
</syntaxhighlight>
==== Arrayオブジェクトとfor文 ====
Arrayオブジェクトは、任意の Ruby オブジェクトを要素として持つことができます。
配列式<code>[要素1, 要素2, … 要素n]</code> で生成します。
;[https://paiza.io/projects/zwRG10FKO8uQf3tv72C9NQ?language=ruby コード]:<syntaxhighlight lang="ruby">
animals = ["ネコ", "金魚", "ハムスター"]
puts animals.class
for animal in animals do
puts "動物 #{animal}"
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
動物 ネコ
動物 金魚
動物 ハムスター
</syntaxhighlight>
==== Hashオブジェクトとfor文 ====
Hashオブジェクトは、任意の Ruby オブジェクトをキーに、任意の Ruby オブジェクトを値に持つことができる連想配列です。
Hash式<code>{キー1 => 値1, キー2 => 値2, キーn => 値n}</code> で生成します。
また、キーが Symbol の場合
Hash式<code>{キー1: 値1, キー2: 値2, キーn: 値n}</code> で生成することが出来ます。
;[https://paiza.io/projects/CeZa9Pg-HLS2I1ijggGkYw?language=ruby コード]:<syntaxhighlight lang="ruby">
animals = {cat: "ネコ", gold_fish: "金魚", hamster: "ハムスター"}
puts animals.class
for en, animal in animals do
puts "動物 #{en}: #{animal}"
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Hash
動物 cat: ネコ
動物 gold_fish: 金魚
動物 hamster: ハムスター
</syntaxhighlight>
このように、Rubyのfor文は多様なコレクションを受け付けます。
===== loop文 =====
loop文(ループぶん、loop statement)は永久ループを提供します。
;構文:<syntaxhighlight lang="ruby">
until [ do ]
文1
文2
:
文n
end
</syntaxhighlight>
;[https://paiza.io/projects/ZB-Ikm3W8SOoKLTlGU161Q?language=ruby loop文のコード例]:<syntaxhighlight lang="ruby" line>
i = 1
loop
puts "%b" % i
i <<= 1
break if i > 2**80
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
0b1
0b10
0b100
0b1000
0b10000
0b100000
0b1000000
0b10000000
0b100000000
</syntaxhighlight>
:5行目の、<code>break if i > 2**80</code>でループを脱出するようにしています。この様に break や return あるいは例外が上がらないとループは永久に終わりません。
:このコードは、Rubyにはない do-while文を模倣する例にもなっています。
==== イテレーターメソッド ====
===== eachメソッド =====
上述 for を使った配列の処理と、同じ処理を、次のようにコレクションの<code>each</code>メソッドを使っても書けます。
;[https://paiza.io/projects/GEmXBCX8GIC27X5U1F1jjw?language=ruby コード]:<syntaxhighlight lang="ruby">
rng = 1..3
puts rng.class
rng.each do
puts "テキスト";
end
animals = ["ネコ", "金魚", "ハムスター"]
animals.each do |animal|
puts "ペット:#{animal}"
end
animals = {cat: "ネコ", gold_fish: "金魚", hamster: "ハムスター"}
puts animals.class
animals.each do |en, animal|
puts "動物 #{en}: #{animal}"
end
</syntaxhighlight>
:実行結果:<syntaxhighlight lang="text">
Range
テキスト
テキスト
テキスト
ペット:ネコ
ペット:金魚
ペット:ハムスター
Hash
動物 cat: ネコ
動物 gold_fish: 金魚
動物 hamster: ハムスター
</syntaxhighlight>
===== Integer#times =====
Integer#timesは与えられたブロックをオブジェクトの示す整数値回くりかえします。
:コード<syntaxhighlight lang="ruby">
3.times{ puts 'Hello, world!' }
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Hello, world!
Hello, world!
Hello, world!
</syntaxhighlight>
;繰返したい処理が2行以上ある場合:<syntaxhighlight lang="ruby">
3.times {
puts 'Hello'
puts 'World'
puts ''
}
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Hello
World
Hello
World
Hello
World
</syntaxhighlight>
;[https://paiza.io/projects/tycqR9lC1dCY_rWwjGhYvA?language=ruby ループ変数を使た例]:<syntaxhighlight lang="ruby">
3.times do |i|
puts "#{i}の倍は#{2 * i}"
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
0の倍は0
1の倍は2
2の倍は4
</syntaxhighlight>
;ブロックを伴わないtimesメソッド:<syntaxhighlight lang="ruby">
iter = 3.times
puts iter.class
puts iter.next # 0
puts iter.next # 1
puts iter.next # 2
# puts iter.next # `next': StopIteration: iteration reached an end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Enumerator
0
1
2
</syntaxhighlight>
: Integer#times にブロックを渡さないと、Enumeratorオブジェクトが返ります。
: Enumeratorオブジェクトは外部イテレーターと呼ばれnextメソッドで反復を行えます。
==== lazy ====
イテレーション メソッドでメソッド チェインを使うと、中間結果としてに大きなコレクションができてしまいます。
lazyを使うと、遅延評価を行いこれを避けることができます。
Enumableを[[プログラミング/ジェネレター]]に変換していると捉えることができます。
;lazy:<syntaxhighlight lang="ruby">
print "non lazy: "
p (0...10).filter{ |i|
print "#{i} "
i % 2 == 0
}.map { | i |
print "(#{i}) "
i
}.first(3)
print "lazy: "
p (0...10).lazy.filter{ |i|
print "#{i} "
i % 2 == 0
}.map { | i |
print "(#{i}) "
i
}.first(3)
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
non lazy: 0 1 2 3 4 5 6 7 8 9 (0) (2) (4) (6) (8) [0, 2, 4]
lazy: 0 (0) 1 2 (2) 3 4 (4) [0, 2, 4]
</syntaxhighlight>
== 高階関数 ==
=== lambda ===
無名関数を定義するにはKernel.#lambdaを使用します。Proc.newも近い機能を提供しますが、lambda のほうがより厳密で、引数の数が異なるって場合エラーとなります。
<syntaxhighlight lang="ruby">
lambda {|x, y| x + y }[2, 3] # => 5
</syntaxhighlight>
lambdaが返すProcオブジェクトにアクセスするにはブラケットを使用します。callメソッドを呼んでも同じことです。
== HTTPクライアント ==
open-uriを使用すると簡単ですが、より高度なインタフェースが必要な場合はNet::HTTPを使用します。
<syntaxhighlight lang="ruby">
require 'open-uri'
puts open('http://www.example.com/').read
</syntaxhighlight>
open-uriは組み込みのopenメソッド(Kernel.#open)をオーバーライドします。ワンライナーで書くこともできます。
<syntaxhighlight lang="console">
% ruby -ropen-uri -e 'puts open(ARGV.shift).read' http://www.example.com/
</syntaxhighlight>
ARGVはコマンドライン引数の配列、Array#shiftメソッドは最初の要素を取り出します。
== 応用 ==
{{進捗状況}}
* [[Ruby on Rails]] {{進捗|00%|2022-06-07}} 0%
== 脚註 ==
<references />
{{スタブ}}
[[Category:Ruby|*]]
[[Category:プログラミング言語]]
{{NDC|007.64}}
lld5u6t68f0kkkuv4gmoriuucoqlk1z
京大対策/数学
0
11201
205674
201582
2022-07-22T13:08:25Z
61.21.30.95
wikitext
text/x-wiki
===概説===
京都大学の理系は150分間で6題(200点満点・各学部で配点に応じて素点を換算)、文系では120分間で5題(150点満点・各学部で配点に応じて素点を換算)を解答する。
各大問の配点は基本的には30点または35点である。
各大問の配点は問題用紙に記載されている。
===出題範囲===
理系・文系を問わず、確率、初等幾何(空間図形も含める)、微積分が頻出である。
また整数問題が出題されやすい(年に2問の出題もある)。
証明問題以外でも論理展開が重要な問題が出題されることが多い。
これが古くから「論証の京大」と呼ばれる所以である。
===問題===
問題は全問記述式である。
理系数学は6つの大問を150分で解答する。
文系配当の数学では5題を120分で解答する。
配点は各大問30点または35点である(近年はまれに理系数学で40点の大問も見られる)。
どの問題が何点配当かは問題用紙に記載されている。
配点を見ながら解く順番を決めることも可能である。
===難易度===
2006年度を最後に後期試験が廃止された。
以降、本学は数学において傾向と対策を取られない様に、内容においても難易度においても大きく変動させている。
理系でも難易度の高い設問がしばしば共通問題として出題されている。
===近年の傾向===
2002年以前は著しく難易度の高い問題や、煩雑な処理計算問題が出題される等、極めて高水準な問題ぞろいであった。
しかし、それでは受験生が解けず、差が出なかった。
京大教授陣が0完合格者の常態化を懸念し、かつ部分点戦略を王道とする予備校の指導方針に危機感を抱いた。
これを受けて2003年以降は文系・理系とも易化傾向にあり、現在へと継承される京大独自路線の代名詞でもある完答主義へと方針を大きく転換させた。
2007年度から京大入試改革がなされ、各科目で出題方針と試験時間で再編成がなされた。
2007年度、2009年度、2012年度、2020年度理系数学入試は難化した。
2003年度、2004年度、2005年度、2006年度、2010年度、2011年度、2013年度、2021年度、 2022年度理系数学入試は易化した。
===目標点数===
他科目との兼ね合いもある。
理系に関しては、医学科で4~5題分(7割弱)、その他の理系学部で3題と部分点(6割弱)、易しめの年では4題分の確保を目標としたい。
全5題で構成される文系学部は2題と部分点ないし3題分(5割5分)を一つの目安にするのが無難である。
===採点・答案作成に関して===
京大数学は証明問題の多さからもわかるように論理力・表現力を非常に重視している。
===数学の発想のしかた===
京大では、知識は教科書レベルでも発想の仕方で差が生まれる問題が多い。
また、文系であっても数学IIIの知識を用いて構わないのと同様に、指導要領外の解法で解答しても、論理的に正しければ満点が与えられる。
===対策===
椅子に座る習慣をもつ必要がある。
そのうえで机の上に問題集とノートを開くことが第二のステップである。
次に、長考をストレス無く習慣化していく。
まずは高校の授業で習う定型的な解法をマスターすることが京大数学攻略への第一歩である。
受験生はまず日々の授業の内容を完全に理解するように努めるべきである。
教科書の基本公式や基礎問題は第三者に説明できるまで理解を深めることが重要である。
友人や教師と内容について議論することも理解を早める処方箋となる。
公式は自分の手で導けるようにしておくのがよい。
===その他留意点===
2007年度から理系数学は学部学科によって甲(標準)・乙(発展)に分かれ、乙のほうがレベルの高いものになっている。理系甲は、総合人間学部(理系)、教育学部(理系)、医学部人間健康科学科(旧保健学科)看護専攻・作業療法専攻。理系乙は、理学部、医学部医学科、人間健康科学科(旧保健学科)理学療法専攻・検査技術専攻、薬学部、工学部、農学部で使用された。<br>
2008年度入試では変更があり、07年度入試で数学甲を選択していた総合人間学部(理系)が08年度では数学乙を選択した。また教育学部(理系)、医学部人間健康科学科(旧保健学科)の全ての専攻で数学甲が採用された。<br>
2009年度では教育学部(理系)、医学部人間健康科学科看護学専攻・作業療法学専攻は数学甲を選択し、それ以外の学部は全て理系乙を選択した。新設の経済学部理系入試も数学乙の選択であった。<br>
2010年度では08年度と同じく教育学部(理系)、医学部人間健康科学科(旧保健学科)の全ての専攻で数学甲が採用され、他の理系学部は数学乙が採用された。<br>
<br>
なお、2011年度からは、理系は再び全学部共通の問題が使用されている。
2019年度では文理共に常用対数表が出題された。
[[Category:京都大学対策|すうかく]]
1cnw6dt533cgcthj0z2hkdv4d0fxwrs
PostgreSQL
0
12677
205704
205666
2022-07-22T22:42:50Z
すじにくシチュー
12058
/* テーブルの作成 */
wikitext
text/x-wiki
<div class="pathnavbox">
* {{Pathnav|メインページ|情報技術}}
</div>
{{Wikipedia}}
== 公式ドキュメント ==
公式ドキュメントは以下のサイトで参照できる。
* [https://www.postgresql.jp/document/ PostgreSQL日本語ドキュメント] (日本語)
* [https://www.postgresql.org/docs/ PostgreSQL: Documentation] (英語)
* <!-- [http://developer.postgresql.org/pgdocs/postgres/ PostgreSQL devel Documentation]--> <del>PostgreSQL devel Documentation (英語, 開発版)</del> ※リンク切れのためコメントアウト
== 概要 ==
=== インストール方法 ===
Fedora の場合、dnf コマンド
sudo dnf install postgresql
sudo dnf install postgresql-server
で入る。
それぞれ、クライアント側(postgresql)とサーバー側(postgresql-server)である。この両方を入れないといけない。片方だけだと、後述の sytemctl が失敗する。データベースサーバーとして postgresql-server を起動して使う仕組みである。
インストールできたと思ったら、とりあえず下記コマンドでバージョン確認をできる。
psql -V
または
psql --version
である。
なお、ヘルプ一覧を見るには<code>psql --help</code>である。<code>h</code>だけだとホスト("host")に「h」が使われているので、ヘルプの意味にならないので、きちんと help と指定しよう。
;初期設定
データベースとしての使用の前には、さらに後述のsytemctlの前に、初期化の設定を下記コマンドで行わないといけない。(そうしないとエラーで失敗する)
sudo postgresql-setup --initdb
=== 起動や終了などの方法 ===
;起動方法
上記のコマンドがすべて終わったら、ようやく、postgresql-server を起動できる。コマンド名にはserver とないが、しかし下記コマンドで起動されるのはデータベースサーバーのほうである。
sudo systemctl start postgresql
なお、sytemctl start は Fedora側のコマンドである。単にそのコマンドを使って postgresql を起動せよ、という命令を上記コマンドでは実行しているにすぎない。
;終了方法
postgresqlサーバー終了は
sudo systemctl stop postgresql
である。
;状態確認コマンド
起動状態の確認コマンドは、起動中(systemctl start postgresql を実行したあとの状態)に、
sudo systemctl status postgresql
である。これを押すと、ターミナル(コマンド端末)画面に、確認結果の情報が列記される。
なお、確認画面の終了方法は q ボタン である。
;接続方法
postgres を使用するためには、インストールしたpostgresのシステムに接続しなければならないが、その際にアカウントが必要になるのだが、当然、あなた個人用のアカウントなんて作成されておらず、「 postgres 」という名のアカウントだけが事前に用意されているので、これを使うことになる。
なので、まずLinux のターミナルのアカウントを変更する必要がある。下記コマンド
sudo su - postgres
でアカウント「postgres」に変更できる。これをしないと、手元のパソコンで通常使用しているユーザー名でpostgresシステムにログインしようとするが、当然ながらそんなアカウント名はインストールしたばかりのpostgresシステムでは作成されていないので、(アカウント名を postgres に切り替えないと)ログインに失敗してしまう。
アカウント名を切り替え終わったら、コマンド
psql -U postgres
でログインできる。
<pre>
[postgres@fedora ~]$ psql -U postgres
psql (14.3)
"help"でヘルプを表示します。
postgres=#
</pre>
のような結果になれば、とりあえず成功である。
なお、終了するには、コマンド
\q
である。つまり、
<pre>
postgres-# \q
</pre>
のような入力画面でエンターすることになる。
これはまだpostgresqlとの接続を終了しただけなので、まだlinuxのアカウントはpostgreのままである。
なので、普段使用している元のアカウントに戻るなら、単に <code>exit</code> コマンドで良い。
exit
=== 試験使用 ===
インストールや初期設定の終わったあとなら、
sudo su - postgres
のあとで、
下記コマンドを実行するだけで、まだなにもデータベースを作成しなくても、データの一覧が表示されます。
psql -l
Fedora 36 にインストールした psql (PostgreSQL) 14.3 での例は、下記のようなデータでした。
<pre>
データベース一覧
名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権限
-----------+----------+------------------+-------------+-------------------+-----------------------
postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(3 行)
</pre>
== データベースの作成方法 ==
たとえば、
sudo su - postgres
で、まず接続する。
そのあと、まず、所有者になるユーザーを専用コマンド<code>createuser</code> で作る。たとえばユーザー名を yamada とするならコマンドは
createuser yamada
となる。
その後、そのユーザー名を、これから作成するデータベースの所有者(owner)名としてデータベース登録を始める。とりあえずデータベース名を testdb とするなら、コマンドは
createdb -O yamada testdb
のようになる。
確認のため、
psql -l
コマンド。すると、下記のように表示される。
<pre>
データベース一覧
名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権限
-----------+----------+------------------+-------------+-------------------+-----------------------
testdb | yamada | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(4 行)
</pre>
のように、作成したデータベースが追加されて
testdb | yamada | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
という行が加わり、また最後が「4 行」になっているのが分かる。
このtestdb にログインするには、単に、上記の表示などが見られる postgresQL接続状態にて、コマンド
psql testdb
を実行するだけでいい。
<pre>
psql (14.3)
"help"でヘルプを表示します。
</pre>
のように表示されれば、とりあえずの成功である。
== テーブルの作成 ==
先に
sudo su - postgres
psql -U postgres
をしておく。
<code>CREATE TABLE</code> コマンドで、テーブルを作成できる。
書式は、
<pre>
CREATE TABLE テーブル名 (
列名1 データ型1 補足1,
列名2 データ型2 補足2
);
</pre>
である。「補足」の部分は無くても良く、たとえばNULL値を許容するかどうかの指定などに使う。 NOT NULL などが「補足」にくる。
コード例
<pre>
mydb=# CREATE TABLE test1 (
id integer,
name varchar(30)
);
</pre>
末尾にセミコロンが必要なのを注意。セミコロンを忘れると作成できない。
上記コードを入力すると、自動的に下記のように「CREATE TABLE」という反応が最終行の下に追記され、また入力待ちになるので、下記のような画面になる。
画面
<pre>
mydb=# CREATE TABLE test1 (
id integer,
name varchar(30)
);
CREATE TABLE
mydb=#
</pre>
とりあえず、この画面になれば成功である。
この状態で、入力したテーブルの内容を確認するには<code>\d</code>で可能である。
<pre>
mydb=# CREATE TABLE test1 (
id integer,
name varchar(30)
);
CREATE TABLE
mydb=# \d
リレーション一覧
スキーマ | 名前 | タイプ | 所有者
----------+-------+----------+----------
public | test1 | テーブル | postgres
(1 行)
</pre>
なお、データベース名が「mydb」に変わってるが、単にwiki著者がネット情報を参考にそのデータベース名で作ってしまったから、そうなってる。
これだけだと、まだデータの列名だけを決めただけなので、具体的な中身がない。中身はコマンド <code></code>で入力できる。
つづけて、
<pre>
リレーション一覧
スキーマ | 名前 | タイプ | 所有者
----------+-------+----------+----------
public | test1 | テーブル | postgres
(1 行)
mydb=# insert into test1 values (1, 'tanaka' );
INSERT 0 1
</pre>
のようにinsert コマンド「 insert into test1 values (1, 'tanaka' ); 」を入力すると、
反応「 INSERT 0 1 」が返ってくる。
作成したテーブルの中身を確認したいなら、コマンド<code>select</code>であり、上記の場合なら具体的には
select * from test1;
である。
結果
<pre>
mydb=# select * from test1;
id | name
----+--------
1 | tanaka
(1 行)
</pre>
のようになれば、成功。
== 関連項目 ==
* [[:en:PostgreSQL/Select without elimination]] - How to use a conditional to narrow down without elimination.
* [[:en:Converting MySQL to PostgreSQL]]
[[Category:PostgreSQL|*]]
[[Category:データベース管理システム]]
jh42m7f0nnp8r86lahtfjfg45iagf20
205705
205704
2022-07-22T22:43:29Z
すじにくシチュー
12058
/* テーブルの作成 */
wikitext
text/x-wiki
<div class="pathnavbox">
* {{Pathnav|メインページ|情報技術}}
</div>
{{Wikipedia}}
== 公式ドキュメント ==
公式ドキュメントは以下のサイトで参照できる。
* [https://www.postgresql.jp/document/ PostgreSQL日本語ドキュメント] (日本語)
* [https://www.postgresql.org/docs/ PostgreSQL: Documentation] (英語)
* <!-- [http://developer.postgresql.org/pgdocs/postgres/ PostgreSQL devel Documentation]--> <del>PostgreSQL devel Documentation (英語, 開発版)</del> ※リンク切れのためコメントアウト
== 概要 ==
=== インストール方法 ===
Fedora の場合、dnf コマンド
sudo dnf install postgresql
sudo dnf install postgresql-server
で入る。
それぞれ、クライアント側(postgresql)とサーバー側(postgresql-server)である。この両方を入れないといけない。片方だけだと、後述の sytemctl が失敗する。データベースサーバーとして postgresql-server を起動して使う仕組みである。
インストールできたと思ったら、とりあえず下記コマンドでバージョン確認をできる。
psql -V
または
psql --version
である。
なお、ヘルプ一覧を見るには<code>psql --help</code>である。<code>h</code>だけだとホスト("host")に「h」が使われているので、ヘルプの意味にならないので、きちんと help と指定しよう。
;初期設定
データベースとしての使用の前には、さらに後述のsytemctlの前に、初期化の設定を下記コマンドで行わないといけない。(そうしないとエラーで失敗する)
sudo postgresql-setup --initdb
=== 起動や終了などの方法 ===
;起動方法
上記のコマンドがすべて終わったら、ようやく、postgresql-server を起動できる。コマンド名にはserver とないが、しかし下記コマンドで起動されるのはデータベースサーバーのほうである。
sudo systemctl start postgresql
なお、sytemctl start は Fedora側のコマンドである。単にそのコマンドを使って postgresql を起動せよ、という命令を上記コマンドでは実行しているにすぎない。
;終了方法
postgresqlサーバー終了は
sudo systemctl stop postgresql
である。
;状態確認コマンド
起動状態の確認コマンドは、起動中(systemctl start postgresql を実行したあとの状態)に、
sudo systemctl status postgresql
である。これを押すと、ターミナル(コマンド端末)画面に、確認結果の情報が列記される。
なお、確認画面の終了方法は q ボタン である。
;接続方法
postgres を使用するためには、インストールしたpostgresのシステムに接続しなければならないが、その際にアカウントが必要になるのだが、当然、あなた個人用のアカウントなんて作成されておらず、「 postgres 」という名のアカウントだけが事前に用意されているので、これを使うことになる。
なので、まずLinux のターミナルのアカウントを変更する必要がある。下記コマンド
sudo su - postgres
でアカウント「postgres」に変更できる。これをしないと、手元のパソコンで通常使用しているユーザー名でpostgresシステムにログインしようとするが、当然ながらそんなアカウント名はインストールしたばかりのpostgresシステムでは作成されていないので、(アカウント名を postgres に切り替えないと)ログインに失敗してしまう。
アカウント名を切り替え終わったら、コマンド
psql -U postgres
でログインできる。
<pre>
[postgres@fedora ~]$ psql -U postgres
psql (14.3)
"help"でヘルプを表示します。
postgres=#
</pre>
のような結果になれば、とりあえず成功である。
なお、終了するには、コマンド
\q
である。つまり、
<pre>
postgres-# \q
</pre>
のような入力画面でエンターすることになる。
これはまだpostgresqlとの接続を終了しただけなので、まだlinuxのアカウントはpostgreのままである。
なので、普段使用している元のアカウントに戻るなら、単に <code>exit</code> コマンドで良い。
exit
=== 試験使用 ===
インストールや初期設定の終わったあとなら、
sudo su - postgres
のあとで、
下記コマンドを実行するだけで、まだなにもデータベースを作成しなくても、データの一覧が表示されます。
psql -l
Fedora 36 にインストールした psql (PostgreSQL) 14.3 での例は、下記のようなデータでした。
<pre>
データベース一覧
名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権限
-----------+----------+------------------+-------------+-------------------+-----------------------
postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(3 行)
</pre>
== データベースの作成方法 ==
たとえば、
sudo su - postgres
で、まず接続する。
そのあと、まず、所有者になるユーザーを専用コマンド<code>createuser</code> で作る。たとえばユーザー名を yamada とするならコマンドは
createuser yamada
となる。
その後、そのユーザー名を、これから作成するデータベースの所有者(owner)名としてデータベース登録を始める。とりあえずデータベース名を testdb とするなら、コマンドは
createdb -O yamada testdb
のようになる。
確認のため、
psql -l
コマンド。すると、下記のように表示される。
<pre>
データベース一覧
名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権限
-----------+----------+------------------+-------------+-------------------+-----------------------
testdb | yamada | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(4 行)
</pre>
のように、作成したデータベースが追加されて
testdb | yamada | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
という行が加わり、また最後が「4 行」になっているのが分かる。
このtestdb にログインするには、単に、上記の表示などが見られる postgresQL接続状態にて、コマンド
psql testdb
を実行するだけでいい。
<pre>
psql (14.3)
"help"でヘルプを表示します。
</pre>
のように表示されれば、とりあえずの成功である。
== テーブルの作成 ==
先に
sudo su - postgres
psql -U postgres
をしておく。
すると、下記の状態になる。
<pre>
psql (14.3)
"help"でヘルプを表示します。
postgres=#
</pre>
<code>CREATE TABLE</code> コマンドで、テーブルを作成できる。
書式は、
<pre>
CREATE TABLE テーブル名 (
列名1 データ型1 補足1,
列名2 データ型2 補足2
);
</pre>
である。「補足」の部分は無くても良く、たとえばNULL値を許容するかどうかの指定などに使う。 NOT NULL などが「補足」にくる。
コード例
<pre>
mydb=# CREATE TABLE test1 (
id integer,
name varchar(30)
);
</pre>
末尾にセミコロンが必要なのを注意。セミコロンを忘れると作成できない。
上記コードを入力すると、自動的に下記のように「CREATE TABLE」という反応が最終行の下に追記され、また入力待ちになるので、下記のような画面になる。
画面
<pre>
mydb=# CREATE TABLE test1 (
id integer,
name varchar(30)
);
CREATE TABLE
mydb=#
</pre>
とりあえず、この画面になれば成功である。
この状態で、入力したテーブルの内容を確認するには<code>\d</code>で可能である。
<pre>
mydb=# CREATE TABLE test1 (
id integer,
name varchar(30)
);
CREATE TABLE
mydb=# \d
リレーション一覧
スキーマ | 名前 | タイプ | 所有者
----------+-------+----------+----------
public | test1 | テーブル | postgres
(1 行)
</pre>
なお、データベース名が「mydb」に変わってるが、単にwiki著者がネット情報を参考にそのデータベース名で作ってしまったから、そうなってる。
これだけだと、まだデータの列名だけを決めただけなので、具体的な中身がない。中身はコマンド <code></code>で入力できる。
つづけて、
<pre>
リレーション一覧
スキーマ | 名前 | タイプ | 所有者
----------+-------+----------+----------
public | test1 | テーブル | postgres
(1 行)
mydb=# insert into test1 values (1, 'tanaka' );
INSERT 0 1
</pre>
のようにinsert コマンド「 insert into test1 values (1, 'tanaka' ); 」を入力すると、
反応「 INSERT 0 1 」が返ってくる。
作成したテーブルの中身を確認したいなら、コマンド<code>select</code>であり、上記の場合なら具体的には
select * from test1;
である。
結果
<pre>
mydb=# select * from test1;
id | name
----+--------
1 | tanaka
(1 行)
</pre>
のようになれば、成功。
== 関連項目 ==
* [[:en:PostgreSQL/Select without elimination]] - How to use a conditional to narrow down without elimination.
* [[:en:Converting MySQL to PostgreSQL]]
[[Category:PostgreSQL|*]]
[[Category:データベース管理システム]]
awnhfcdj2s8gm7s5s4xxo185xx78ugp
205706
205705
2022-07-22T22:44:11Z
すじにくシチュー
12058
/* テーブルの作成 */
wikitext
text/x-wiki
<div class="pathnavbox">
* {{Pathnav|メインページ|情報技術}}
</div>
{{Wikipedia}}
== 公式ドキュメント ==
公式ドキュメントは以下のサイトで参照できる。
* [https://www.postgresql.jp/document/ PostgreSQL日本語ドキュメント] (日本語)
* [https://www.postgresql.org/docs/ PostgreSQL: Documentation] (英語)
* <!-- [http://developer.postgresql.org/pgdocs/postgres/ PostgreSQL devel Documentation]--> <del>PostgreSQL devel Documentation (英語, 開発版)</del> ※リンク切れのためコメントアウト
== 概要 ==
=== インストール方法 ===
Fedora の場合、dnf コマンド
sudo dnf install postgresql
sudo dnf install postgresql-server
で入る。
それぞれ、クライアント側(postgresql)とサーバー側(postgresql-server)である。この両方を入れないといけない。片方だけだと、後述の sytemctl が失敗する。データベースサーバーとして postgresql-server を起動して使う仕組みである。
インストールできたと思ったら、とりあえず下記コマンドでバージョン確認をできる。
psql -V
または
psql --version
である。
なお、ヘルプ一覧を見るには<code>psql --help</code>である。<code>h</code>だけだとホスト("host")に「h」が使われているので、ヘルプの意味にならないので、きちんと help と指定しよう。
;初期設定
データベースとしての使用の前には、さらに後述のsytemctlの前に、初期化の設定を下記コマンドで行わないといけない。(そうしないとエラーで失敗する)
sudo postgresql-setup --initdb
=== 起動や終了などの方法 ===
;起動方法
上記のコマンドがすべて終わったら、ようやく、postgresql-server を起動できる。コマンド名にはserver とないが、しかし下記コマンドで起動されるのはデータベースサーバーのほうである。
sudo systemctl start postgresql
なお、sytemctl start は Fedora側のコマンドである。単にそのコマンドを使って postgresql を起動せよ、という命令を上記コマンドでは実行しているにすぎない。
;終了方法
postgresqlサーバー終了は
sudo systemctl stop postgresql
である。
;状態確認コマンド
起動状態の確認コマンドは、起動中(systemctl start postgresql を実行したあとの状態)に、
sudo systemctl status postgresql
である。これを押すと、ターミナル(コマンド端末)画面に、確認結果の情報が列記される。
なお、確認画面の終了方法は q ボタン である。
;接続方法
postgres を使用するためには、インストールしたpostgresのシステムに接続しなければならないが、その際にアカウントが必要になるのだが、当然、あなた個人用のアカウントなんて作成されておらず、「 postgres 」という名のアカウントだけが事前に用意されているので、これを使うことになる。
なので、まずLinux のターミナルのアカウントを変更する必要がある。下記コマンド
sudo su - postgres
でアカウント「postgres」に変更できる。これをしないと、手元のパソコンで通常使用しているユーザー名でpostgresシステムにログインしようとするが、当然ながらそんなアカウント名はインストールしたばかりのpostgresシステムでは作成されていないので、(アカウント名を postgres に切り替えないと)ログインに失敗してしまう。
アカウント名を切り替え終わったら、コマンド
psql -U postgres
でログインできる。
<pre>
[postgres@fedora ~]$ psql -U postgres
psql (14.3)
"help"でヘルプを表示します。
postgres=#
</pre>
のような結果になれば、とりあえず成功である。
なお、終了するには、コマンド
\q
である。つまり、
<pre>
postgres-# \q
</pre>
のような入力画面でエンターすることになる。
これはまだpostgresqlとの接続を終了しただけなので、まだlinuxのアカウントはpostgreのままである。
なので、普段使用している元のアカウントに戻るなら、単に <code>exit</code> コマンドで良い。
exit
=== 試験使用 ===
インストールや初期設定の終わったあとなら、
sudo su - postgres
のあとで、
下記コマンドを実行するだけで、まだなにもデータベースを作成しなくても、データの一覧が表示されます。
psql -l
Fedora 36 にインストールした psql (PostgreSQL) 14.3 での例は、下記のようなデータでした。
<pre>
データベース一覧
名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権限
-----------+----------+------------------+-------------+-------------------+-----------------------
postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(3 行)
</pre>
== データベースの作成方法 ==
たとえば、
sudo su - postgres
で、まず接続する。
そのあと、まず、所有者になるユーザーを専用コマンド<code>createuser</code> で作る。たとえばユーザー名を yamada とするならコマンドは
createuser yamada
となる。
その後、そのユーザー名を、これから作成するデータベースの所有者(owner)名としてデータベース登録を始める。とりあえずデータベース名を testdb とするなら、コマンドは
createdb -O yamada testdb
のようになる。
確認のため、
psql -l
コマンド。すると、下記のように表示される。
<pre>
データベース一覧
名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権限
-----------+----------+------------------+-------------+-------------------+-----------------------
testdb | yamada | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(4 行)
</pre>
のように、作成したデータベースが追加されて
testdb | yamada | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
という行が加わり、また最後が「4 行」になっているのが分かる。
このtestdb にログインするには、単に、上記の表示などが見られる postgresQL接続状態にて、コマンド
psql testdb
を実行するだけでいい。
<pre>
psql (14.3)
"help"でヘルプを表示します。
</pre>
のように表示されれば、とりあえずの成功である。
== テーブルの作成 ==
先に
sudo su - postgres
psql -U postgres
をしておく。
すると、下記の状態になる。
<pre>
psql (14.3)
"help"でヘルプを表示します。
postgres=#
</pre>
<code>CREATE TABLE</code> コマンドで、テーブルを作成できる。
書式は、
<pre>
CREATE TABLE テーブル名 (
列名1 データ型1 補足1,
列名2 データ型2 補足2
);
</pre>
である。「補足」の部分は無くても良く、たとえばNULL値を許容するかどうかの指定などに使う。 NOT NULL などが「補足」にくる。
コード例
<pre>
mydb=# CREATE TABLE test1 (
id integer,
name varchar(30)
);
</pre>
末尾にセミコロンが必要なのを注意。セミコロンを忘れると作成できない。
上記コードを入力すると、自動的に下記のように「CREATE TABLE」という反応が最終行の下に追記され、また入力待ちになるので、下記のような画面になる。
画面
<pre>
mydb=# CREATE TABLE test1 (
id integer,
name varchar(30)
);
CREATE TABLE
mydb=#
</pre>
とりあえず、この画面になれば成功である。
この状態で、入力したテーブルの内容を確認するには<code>\d</code>で可能である。
<pre>
mydb=# CREATE TABLE test1 (
id integer,
name varchar(30)
);
CREATE TABLE
mydb=# \d
リレーション一覧
スキーマ | 名前 | タイプ | 所有者
----------+-------+----------+----------
public | test1 | テーブル | postgres
(1 行)
</pre>
なお、データベース名が「mydb」に変わってるが、単にwiki著者がネット情報を参考にそのデータベース名で作ってしまったから、そうなってる。
これだけだと、まだデータの列名だけを決めただけなので、具体的な中身がない。中身はコマンド <code>insert</code>で入力できる。
つづけて、
<pre>
リレーション一覧
スキーマ | 名前 | タイプ | 所有者
----------+-------+----------+----------
public | test1 | テーブル | postgres
(1 行)
mydb=# insert into test1 values (1, 'tanaka' );
INSERT 0 1
</pre>
のようにinsert コマンド「 insert into test1 values (1, 'tanaka' ); 」を入力すると、
反応「 INSERT 0 1 」が返ってくる。
作成したテーブルの中身を確認したいなら、コマンド<code>select</code>であり、上記の場合なら具体的には
select * from test1;
である。
結果
<pre>
mydb=# select * from test1;
id | name
----+--------
1 | tanaka
(1 行)
</pre>
のようになれば、成功。
== 関連項目 ==
* [[:en:PostgreSQL/Select without elimination]] - How to use a conditional to narrow down without elimination.
* [[:en:Converting MySQL to PostgreSQL]]
[[Category:PostgreSQL|*]]
[[Category:データベース管理システム]]
hfqkpy4990iif9e9qdbvgcj22y6t4tn
205707
205706
2022-07-22T22:53:31Z
すじにくシチュー
12058
項目の削除の方法
wikitext
text/x-wiki
<div class="pathnavbox">
* {{Pathnav|メインページ|情報技術}}
</div>
{{Wikipedia}}
== 公式ドキュメント ==
公式ドキュメントは以下のサイトで参照できる。
* [https://www.postgresql.jp/document/ PostgreSQL日本語ドキュメント] (日本語)
* [https://www.postgresql.org/docs/ PostgreSQL: Documentation] (英語)
* <!-- [http://developer.postgresql.org/pgdocs/postgres/ PostgreSQL devel Documentation]--> <del>PostgreSQL devel Documentation (英語, 開発版)</del> ※リンク切れのためコメントアウト
== 概要 ==
=== インストール方法 ===
Fedora の場合、dnf コマンド
sudo dnf install postgresql
sudo dnf install postgresql-server
で入る。
それぞれ、クライアント側(postgresql)とサーバー側(postgresql-server)である。この両方を入れないといけない。片方だけだと、後述の sytemctl が失敗する。データベースサーバーとして postgresql-server を起動して使う仕組みである。
インストールできたと思ったら、とりあえず下記コマンドでバージョン確認をできる。
psql -V
または
psql --version
である。
なお、ヘルプ一覧を見るには<code>psql --help</code>である。<code>h</code>だけだとホスト("host")に「h」が使われているので、ヘルプの意味にならないので、きちんと help と指定しよう。
;初期設定
データベースとしての使用の前には、さらに後述のsytemctlの前に、初期化の設定を下記コマンドで行わないといけない。(そうしないとエラーで失敗する)
sudo postgresql-setup --initdb
=== 起動や終了などの方法 ===
;起動方法
上記のコマンドがすべて終わったら、ようやく、postgresql-server を起動できる。コマンド名にはserver とないが、しかし下記コマンドで起動されるのはデータベースサーバーのほうである。
sudo systemctl start postgresql
なお、sytemctl start は Fedora側のコマンドである。単にそのコマンドを使って postgresql を起動せよ、という命令を上記コマンドでは実行しているにすぎない。
;終了方法
postgresqlサーバー終了は
sudo systemctl stop postgresql
である。
;状態確認コマンド
起動状態の確認コマンドは、起動中(systemctl start postgresql を実行したあとの状態)に、
sudo systemctl status postgresql
である。これを押すと、ターミナル(コマンド端末)画面に、確認結果の情報が列記される。
なお、確認画面の終了方法は q ボタン である。
;接続方法
postgres を使用するためには、インストールしたpostgresのシステムに接続しなければならないが、その際にアカウントが必要になるのだが、当然、あなた個人用のアカウントなんて作成されておらず、「 postgres 」という名のアカウントだけが事前に用意されているので、これを使うことになる。
なので、まずLinux のターミナルのアカウントを変更する必要がある。下記コマンド
sudo su - postgres
でアカウント「postgres」に変更できる。これをしないと、手元のパソコンで通常使用しているユーザー名でpostgresシステムにログインしようとするが、当然ながらそんなアカウント名はインストールしたばかりのpostgresシステムでは作成されていないので、(アカウント名を postgres に切り替えないと)ログインに失敗してしまう。
アカウント名を切り替え終わったら、コマンド
psql -U postgres
でログインできる。
<pre>
[postgres@fedora ~]$ psql -U postgres
psql (14.3)
"help"でヘルプを表示します。
postgres=#
</pre>
のような結果になれば、とりあえず成功である。
なお、終了するには、コマンド
\q
である。つまり、
<pre>
postgres-# \q
</pre>
のような入力画面でエンターすることになる。
これはまだpostgresqlとの接続を終了しただけなので、まだlinuxのアカウントはpostgreのままである。
なので、普段使用している元のアカウントに戻るなら、単に <code>exit</code> コマンドで良い。
exit
=== 試験使用 ===
インストールや初期設定の終わったあとなら、
sudo su - postgres
のあとで、
下記コマンドを実行するだけで、まだなにもデータベースを作成しなくても、データの一覧が表示されます。
psql -l
Fedora 36 にインストールした psql (PostgreSQL) 14.3 での例は、下記のようなデータでした。
<pre>
データベース一覧
名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権限
-----------+----------+------------------+-------------+-------------------+-----------------------
postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(3 行)
</pre>
== データベースの作成方法 ==
たとえば、
sudo su - postgres
で、まず接続する。
そのあと、まず、所有者になるユーザーを専用コマンド<code>createuser</code> で作る。たとえばユーザー名を yamada とするならコマンドは
createuser yamada
となる。
その後、そのユーザー名を、これから作成するデータベースの所有者(owner)名としてデータベース登録を始める。とりあえずデータベース名を testdb とするなら、コマンドは
createdb -O yamada testdb
のようになる。
確認のため、
psql -l
コマンド。すると、下記のように表示される。
<pre>
データベース一覧
名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権限
-----------+----------+------------------+-------------+-------------------+-----------------------
testdb | yamada | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(4 行)
</pre>
のように、作成したデータベースが追加されて
testdb | yamada | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
という行が加わり、また最後が「4 行」になっているのが分かる。
このtestdb にログインするには、単に、上記の表示などが見られる postgresQL接続状態にて、コマンド
psql testdb
を実行するだけでいい。
<pre>
psql (14.3)
"help"でヘルプを表示します。
</pre>
のように表示されれば、とりあえずの成功である。
== テーブルの作成 ==
先に
sudo su - postgres
psql mydb
をしておく。
すると、下記の状態になる。
<pre>
psql (14.3)
"help"でヘルプを表示します。
postgres=#
</pre>
<code>CREATE TABLE</code> コマンドで、テーブルを作成できる。
書式は、
<pre>
CREATE TABLE テーブル名 (
列名1 データ型1 補足1,
列名2 データ型2 補足2
);
</pre>
である。「補足」の部分は無くても良く、たとえばNULL値を許容するかどうかの指定などに使う。 NOT NULL などが「補足」にくる。
コード例
<pre>
mydb=# CREATE TABLE test1 (
id integer,
name varchar(30)
);
</pre>
末尾にセミコロンが必要なのを注意。セミコロンを忘れると作成できない。
上記コードを入力すると、自動的に下記のように「CREATE TABLE」という反応が最終行の下に追記され、また入力待ちになるので、下記のような画面になる。
画面
<pre>
mydb=# CREATE TABLE test1 (
id integer,
name varchar(30)
);
CREATE TABLE
mydb=#
</pre>
とりあえず、この画面になれば成功である。
この状態で、入力したテーブルの内容を確認するには<code>\d</code>で可能である。
<pre>
mydb=# CREATE TABLE test1 (
id integer,
name varchar(30)
);
CREATE TABLE
mydb=# \d
リレーション一覧
スキーマ | 名前 | タイプ | 所有者
----------+-------+----------+----------
public | test1 | テーブル | postgres
(1 行)
</pre>
なお、データベース名が「mydb」に変わってるが、単にwiki著者がネット情報を参考にそのデータベース名で作ってしまったから、そうなってる。
これだけだと、まだデータの列名だけを決めただけなので、具体的な中身がない。中身はコマンド <code>insert</code>で入力できる。
つづけて、
<pre>
リレーション一覧
スキーマ | 名前 | タイプ | 所有者
----------+-------+----------+----------
public | test1 | テーブル | postgres
(1 行)
mydb=# insert into test1 values (1, 'tanaka' );
INSERT 0 1
</pre>
のようにinsert コマンド「 insert into test1 values (1, 'tanaka' ); 」を入力すると、
反応「 INSERT 0 1 」が返ってくる。
作成したテーブルの中身を確認したいなら、コマンド<code>select</code>であり、上記の場合なら具体的には
select * from test1;
である。
結果
<pre>
mydb=# select * from test1;
id | name
----+--------
1 | tanaka
(1 行)
</pre>
のようになれば、成功。
つづけて、今後のコマンドの勉強のため、読者には
insert into test1 values (2, 'itoh' );
をしてもらいたい。(あとでこれの消しかたを教える)
つづけて
select * from test1;
をすれば、
結果
<pre>
mydb=# select * from test1;
id | name
----+--------
1 | tanaka
2 | itoh
(2 行)
</pre>
のようになる。
== 項目の削除の方法 ==
では、 idが1のtanaka を消そう。<code>delete</code> で消せる。上記の例なら、
delete from test1 where id=1 ;
で消せる。
確認のため、
select * from test1;
すれば、結果
<pre>
mydb=# select * from test1;
id | name
----+------
2 | itoh
(1 行)
</pre>
となる。たしかに yamada が正しく消せた。
== 関連項目 ==
* [[:en:PostgreSQL/Select without elimination]] - How to use a conditional to narrow down without elimination.
* [[:en:Converting MySQL to PostgreSQL]]
[[Category:PostgreSQL|*]]
[[Category:データベース管理システム]]
m9dfhtffepdjvxx825wtdsrz7gx5t4a
205708
205707
2022-07-22T22:54:54Z
すじにくシチュー
12058
/* 項目の削除の方法 */
wikitext
text/x-wiki
<div class="pathnavbox">
* {{Pathnav|メインページ|情報技術}}
</div>
{{Wikipedia}}
== 公式ドキュメント ==
公式ドキュメントは以下のサイトで参照できる。
* [https://www.postgresql.jp/document/ PostgreSQL日本語ドキュメント] (日本語)
* [https://www.postgresql.org/docs/ PostgreSQL: Documentation] (英語)
* <!-- [http://developer.postgresql.org/pgdocs/postgres/ PostgreSQL devel Documentation]--> <del>PostgreSQL devel Documentation (英語, 開発版)</del> ※リンク切れのためコメントアウト
== 概要 ==
=== インストール方法 ===
Fedora の場合、dnf コマンド
sudo dnf install postgresql
sudo dnf install postgresql-server
で入る。
それぞれ、クライアント側(postgresql)とサーバー側(postgresql-server)である。この両方を入れないといけない。片方だけだと、後述の sytemctl が失敗する。データベースサーバーとして postgresql-server を起動して使う仕組みである。
インストールできたと思ったら、とりあえず下記コマンドでバージョン確認をできる。
psql -V
または
psql --version
である。
なお、ヘルプ一覧を見るには<code>psql --help</code>である。<code>h</code>だけだとホスト("host")に「h」が使われているので、ヘルプの意味にならないので、きちんと help と指定しよう。
;初期設定
データベースとしての使用の前には、さらに後述のsytemctlの前に、初期化の設定を下記コマンドで行わないといけない。(そうしないとエラーで失敗する)
sudo postgresql-setup --initdb
=== 起動や終了などの方法 ===
;起動方法
上記のコマンドがすべて終わったら、ようやく、postgresql-server を起動できる。コマンド名にはserver とないが、しかし下記コマンドで起動されるのはデータベースサーバーのほうである。
sudo systemctl start postgresql
なお、sytemctl start は Fedora側のコマンドである。単にそのコマンドを使って postgresql を起動せよ、という命令を上記コマンドでは実行しているにすぎない。
;終了方法
postgresqlサーバー終了は
sudo systemctl stop postgresql
である。
;状態確認コマンド
起動状態の確認コマンドは、起動中(systemctl start postgresql を実行したあとの状態)に、
sudo systemctl status postgresql
である。これを押すと、ターミナル(コマンド端末)画面に、確認結果の情報が列記される。
なお、確認画面の終了方法は q ボタン である。
;接続方法
postgres を使用するためには、インストールしたpostgresのシステムに接続しなければならないが、その際にアカウントが必要になるのだが、当然、あなた個人用のアカウントなんて作成されておらず、「 postgres 」という名のアカウントだけが事前に用意されているので、これを使うことになる。
なので、まずLinux のターミナルのアカウントを変更する必要がある。下記コマンド
sudo su - postgres
でアカウント「postgres」に変更できる。これをしないと、手元のパソコンで通常使用しているユーザー名でpostgresシステムにログインしようとするが、当然ながらそんなアカウント名はインストールしたばかりのpostgresシステムでは作成されていないので、(アカウント名を postgres に切り替えないと)ログインに失敗してしまう。
アカウント名を切り替え終わったら、コマンド
psql -U postgres
でログインできる。
<pre>
[postgres@fedora ~]$ psql -U postgres
psql (14.3)
"help"でヘルプを表示します。
postgres=#
</pre>
のような結果になれば、とりあえず成功である。
なお、終了するには、コマンド
\q
である。つまり、
<pre>
postgres-# \q
</pre>
のような入力画面でエンターすることになる。
これはまだpostgresqlとの接続を終了しただけなので、まだlinuxのアカウントはpostgreのままである。
なので、普段使用している元のアカウントに戻るなら、単に <code>exit</code> コマンドで良い。
exit
=== 試験使用 ===
インストールや初期設定の終わったあとなら、
sudo su - postgres
のあとで、
下記コマンドを実行するだけで、まだなにもデータベースを作成しなくても、データの一覧が表示されます。
psql -l
Fedora 36 にインストールした psql (PostgreSQL) 14.3 での例は、下記のようなデータでした。
<pre>
データベース一覧
名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権限
-----------+----------+------------------+-------------+-------------------+-----------------------
postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(3 行)
</pre>
== データベースの作成方法 ==
たとえば、
sudo su - postgres
で、まず接続する。
そのあと、まず、所有者になるユーザーを専用コマンド<code>createuser</code> で作る。たとえばユーザー名を yamada とするならコマンドは
createuser yamada
となる。
その後、そのユーザー名を、これから作成するデータベースの所有者(owner)名としてデータベース登録を始める。とりあえずデータベース名を testdb とするなら、コマンドは
createdb -O yamada testdb
のようになる。
確認のため、
psql -l
コマンド。すると、下記のように表示される。
<pre>
データベース一覧
名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権限
-----------+----------+------------------+-------------+-------------------+-----------------------
testdb | yamada | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(4 行)
</pre>
のように、作成したデータベースが追加されて
testdb | yamada | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
という行が加わり、また最後が「4 行」になっているのが分かる。
このtestdb にログインするには、単に、上記の表示などが見られる postgresQL接続状態にて、コマンド
psql testdb
を実行するだけでいい。
<pre>
psql (14.3)
"help"でヘルプを表示します。
</pre>
のように表示されれば、とりあえずの成功である。
== テーブルの作成 ==
先に
sudo su - postgres
psql mydb
をしておく。
すると、下記の状態になる。
<pre>
psql (14.3)
"help"でヘルプを表示します。
postgres=#
</pre>
<code>CREATE TABLE</code> コマンドで、テーブルを作成できる。
書式は、
<pre>
CREATE TABLE テーブル名 (
列名1 データ型1 補足1,
列名2 データ型2 補足2
);
</pre>
である。「補足」の部分は無くても良く、たとえばNULL値を許容するかどうかの指定などに使う。 NOT NULL などが「補足」にくる。
コード例
<pre>
mydb=# CREATE TABLE test1 (
id integer,
name varchar(30)
);
</pre>
末尾にセミコロンが必要なのを注意。セミコロンを忘れると作成できない。
上記コードを入力すると、自動的に下記のように「CREATE TABLE」という反応が最終行の下に追記され、また入力待ちになるので、下記のような画面になる。
画面
<pre>
mydb=# CREATE TABLE test1 (
id integer,
name varchar(30)
);
CREATE TABLE
mydb=#
</pre>
とりあえず、この画面になれば成功である。
この状態で、入力したテーブルの内容を確認するには<code>\d</code>で可能である。
<pre>
mydb=# CREATE TABLE test1 (
id integer,
name varchar(30)
);
CREATE TABLE
mydb=# \d
リレーション一覧
スキーマ | 名前 | タイプ | 所有者
----------+-------+----------+----------
public | test1 | テーブル | postgres
(1 行)
</pre>
なお、データベース名が「mydb」に変わってるが、単にwiki著者がネット情報を参考にそのデータベース名で作ってしまったから、そうなってる。
これだけだと、まだデータの列名だけを決めただけなので、具体的な中身がない。中身はコマンド <code>insert</code>で入力できる。
つづけて、
<pre>
リレーション一覧
スキーマ | 名前 | タイプ | 所有者
----------+-------+----------+----------
public | test1 | テーブル | postgres
(1 行)
mydb=# insert into test1 values (1, 'tanaka' );
INSERT 0 1
</pre>
のようにinsert コマンド「 insert into test1 values (1, 'tanaka' ); 」を入力すると、
反応「 INSERT 0 1 」が返ってくる。
作成したテーブルの中身を確認したいなら、コマンド<code>select</code>であり、上記の場合なら具体的には
select * from test1;
である。
結果
<pre>
mydb=# select * from test1;
id | name
----+--------
1 | tanaka
(1 行)
</pre>
のようになれば、成功。
つづけて、今後のコマンドの勉強のため、読者には
insert into test1 values (2, 'itoh' );
をしてもらいたい。(あとでこれの消しかたを教える)
つづけて
select * from test1;
をすれば、
結果
<pre>
mydb=# select * from test1;
id | name
----+--------
1 | tanaka
2 | itoh
(2 行)
</pre>
のようになる。
== 項目の削除の方法 ==
では、 idが1のtanaka を消そう。<code>delete</code> で消せる。上記の例なら、
delete from test1 where id=1 ;
で消せる。
構文は
DELETE FROM テーブル名 WHERE 条件式
である。
ともかくdeleteコマンドを実行したら、つづけて確認のため、
select * from test1;
すれば、結果
<pre>
mydb=# select * from test1;
id | name
----+------
2 | itoh
(1 行)
</pre>
となる。たしかに yamada が正しく消せた。
== 関連項目 ==
* [[:en:PostgreSQL/Select without elimination]] - How to use a conditional to narrow down without elimination.
* [[:en:Converting MySQL to PostgreSQL]]
[[Category:PostgreSQL|*]]
[[Category:データベース管理システム]]
h6suler3odx1tsrqvjbgzgafehbtb8a
205709
205708
2022-07-22T22:55:15Z
すじにくシチュー
12058
/* 項目の削除の方法 */
wikitext
text/x-wiki
<div class="pathnavbox">
* {{Pathnav|メインページ|情報技術}}
</div>
{{Wikipedia}}
== 公式ドキュメント ==
公式ドキュメントは以下のサイトで参照できる。
* [https://www.postgresql.jp/document/ PostgreSQL日本語ドキュメント] (日本語)
* [https://www.postgresql.org/docs/ PostgreSQL: Documentation] (英語)
* <!-- [http://developer.postgresql.org/pgdocs/postgres/ PostgreSQL devel Documentation]--> <del>PostgreSQL devel Documentation (英語, 開発版)</del> ※リンク切れのためコメントアウト
== 概要 ==
=== インストール方法 ===
Fedora の場合、dnf コマンド
sudo dnf install postgresql
sudo dnf install postgresql-server
で入る。
それぞれ、クライアント側(postgresql)とサーバー側(postgresql-server)である。この両方を入れないといけない。片方だけだと、後述の sytemctl が失敗する。データベースサーバーとして postgresql-server を起動して使う仕組みである。
インストールできたと思ったら、とりあえず下記コマンドでバージョン確認をできる。
psql -V
または
psql --version
である。
なお、ヘルプ一覧を見るには<code>psql --help</code>である。<code>h</code>だけだとホスト("host")に「h」が使われているので、ヘルプの意味にならないので、きちんと help と指定しよう。
;初期設定
データベースとしての使用の前には、さらに後述のsytemctlの前に、初期化の設定を下記コマンドで行わないといけない。(そうしないとエラーで失敗する)
sudo postgresql-setup --initdb
=== 起動や終了などの方法 ===
;起動方法
上記のコマンドがすべて終わったら、ようやく、postgresql-server を起動できる。コマンド名にはserver とないが、しかし下記コマンドで起動されるのはデータベースサーバーのほうである。
sudo systemctl start postgresql
なお、sytemctl start は Fedora側のコマンドである。単にそのコマンドを使って postgresql を起動せよ、という命令を上記コマンドでは実行しているにすぎない。
;終了方法
postgresqlサーバー終了は
sudo systemctl stop postgresql
である。
;状態確認コマンド
起動状態の確認コマンドは、起動中(systemctl start postgresql を実行したあとの状態)に、
sudo systemctl status postgresql
である。これを押すと、ターミナル(コマンド端末)画面に、確認結果の情報が列記される。
なお、確認画面の終了方法は q ボタン である。
;接続方法
postgres を使用するためには、インストールしたpostgresのシステムに接続しなければならないが、その際にアカウントが必要になるのだが、当然、あなた個人用のアカウントなんて作成されておらず、「 postgres 」という名のアカウントだけが事前に用意されているので、これを使うことになる。
なので、まずLinux のターミナルのアカウントを変更する必要がある。下記コマンド
sudo su - postgres
でアカウント「postgres」に変更できる。これをしないと、手元のパソコンで通常使用しているユーザー名でpostgresシステムにログインしようとするが、当然ながらそんなアカウント名はインストールしたばかりのpostgresシステムでは作成されていないので、(アカウント名を postgres に切り替えないと)ログインに失敗してしまう。
アカウント名を切り替え終わったら、コマンド
psql -U postgres
でログインできる。
<pre>
[postgres@fedora ~]$ psql -U postgres
psql (14.3)
"help"でヘルプを表示します。
postgres=#
</pre>
のような結果になれば、とりあえず成功である。
なお、終了するには、コマンド
\q
である。つまり、
<pre>
postgres-# \q
</pre>
のような入力画面でエンターすることになる。
これはまだpostgresqlとの接続を終了しただけなので、まだlinuxのアカウントはpostgreのままである。
なので、普段使用している元のアカウントに戻るなら、単に <code>exit</code> コマンドで良い。
exit
=== 試験使用 ===
インストールや初期設定の終わったあとなら、
sudo su - postgres
のあとで、
下記コマンドを実行するだけで、まだなにもデータベースを作成しなくても、データの一覧が表示されます。
psql -l
Fedora 36 にインストールした psql (PostgreSQL) 14.3 での例は、下記のようなデータでした。
<pre>
データベース一覧
名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権限
-----------+----------+------------------+-------------+-------------------+-----------------------
postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(3 行)
</pre>
== データベースの作成方法 ==
たとえば、
sudo su - postgres
で、まず接続する。
そのあと、まず、所有者になるユーザーを専用コマンド<code>createuser</code> で作る。たとえばユーザー名を yamada とするならコマンドは
createuser yamada
となる。
その後、そのユーザー名を、これから作成するデータベースの所有者(owner)名としてデータベース登録を始める。とりあえずデータベース名を testdb とするなら、コマンドは
createdb -O yamada testdb
のようになる。
確認のため、
psql -l
コマンド。すると、下記のように表示される。
<pre>
データベース一覧
名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権限
-----------+----------+------------------+-------------+-------------------+-----------------------
testdb | yamada | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(4 行)
</pre>
のように、作成したデータベースが追加されて
testdb | yamada | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
という行が加わり、また最後が「4 行」になっているのが分かる。
このtestdb にログインするには、単に、上記の表示などが見られる postgresQL接続状態にて、コマンド
psql testdb
を実行するだけでいい。
<pre>
psql (14.3)
"help"でヘルプを表示します。
</pre>
のように表示されれば、とりあえずの成功である。
== テーブルの作成 ==
先に
sudo su - postgres
psql mydb
をしておく。
すると、下記の状態になる。
<pre>
psql (14.3)
"help"でヘルプを表示します。
postgres=#
</pre>
<code>CREATE TABLE</code> コマンドで、テーブルを作成できる。
書式は、
<pre>
CREATE TABLE テーブル名 (
列名1 データ型1 補足1,
列名2 データ型2 補足2
);
</pre>
である。「補足」の部分は無くても良く、たとえばNULL値を許容するかどうかの指定などに使う。 NOT NULL などが「補足」にくる。
コード例
<pre>
mydb=# CREATE TABLE test1 (
id integer,
name varchar(30)
);
</pre>
末尾にセミコロンが必要なのを注意。セミコロンを忘れると作成できない。
上記コードを入力すると、自動的に下記のように「CREATE TABLE」という反応が最終行の下に追記され、また入力待ちになるので、下記のような画面になる。
画面
<pre>
mydb=# CREATE TABLE test1 (
id integer,
name varchar(30)
);
CREATE TABLE
mydb=#
</pre>
とりあえず、この画面になれば成功である。
この状態で、入力したテーブルの内容を確認するには<code>\d</code>で可能である。
<pre>
mydb=# CREATE TABLE test1 (
id integer,
name varchar(30)
);
CREATE TABLE
mydb=# \d
リレーション一覧
スキーマ | 名前 | タイプ | 所有者
----------+-------+----------+----------
public | test1 | テーブル | postgres
(1 行)
</pre>
なお、データベース名が「mydb」に変わってるが、単にwiki著者がネット情報を参考にそのデータベース名で作ってしまったから、そうなってる。
これだけだと、まだデータの列名だけを決めただけなので、具体的な中身がない。中身はコマンド <code>insert</code>で入力できる。
つづけて、
<pre>
リレーション一覧
スキーマ | 名前 | タイプ | 所有者
----------+-------+----------+----------
public | test1 | テーブル | postgres
(1 行)
mydb=# insert into test1 values (1, 'tanaka' );
INSERT 0 1
</pre>
のようにinsert コマンド「 insert into test1 values (1, 'tanaka' ); 」を入力すると、
反応「 INSERT 0 1 」が返ってくる。
作成したテーブルの中身を確認したいなら、コマンド<code>select</code>であり、上記の場合なら具体的には
select * from test1;
である。
結果
<pre>
mydb=# select * from test1;
id | name
----+--------
1 | tanaka
(1 行)
</pre>
のようになれば、成功。
つづけて、今後のコマンドの勉強のため、読者には
insert into test1 values (2, 'itoh' );
をしてもらいたい。(あとでこれの消しかたを教える)
つづけて
select * from test1;
をすれば、
結果
<pre>
mydb=# select * from test1;
id | name
----+--------
1 | tanaka
2 | itoh
(2 行)
</pre>
のようになる。
== 項目の削除の方法 ==
では、 idが1のtanaka を消そう。<code>delete</code> で消せる。上記の例なら、
delete from test1 where id=1 ;
で消せる。
構文は
DELETE FROM テーブル名 WHERE 条件式
である。
ともかくdeleteコマンドを実行したら、つづけて確認のため、
select * from test1;
すれば、結果
<pre>
mydb=# select * from test1;
id | name
----+------
2 | itoh
(1 行)
</pre>
となる。たしかに yamada が正しく消せた。
== 関連項目 ==
* [[:en:PostgreSQL/Select without elimination]] - How to use a conditional to narrow down without elimination.
* [[:en:Converting MySQL to PostgreSQL]]
[[Category:PostgreSQL|*]]
[[Category:データベース管理システム]]
hso9ogyecbdr1tw407jiqvsj54ms8nz
205710
205709
2022-07-22T22:58:05Z
すじにくシチュー
12058
/* テーブルの作成 */
wikitext
text/x-wiki
<div class="pathnavbox">
* {{Pathnav|メインページ|情報技術}}
</div>
{{Wikipedia}}
== 公式ドキュメント ==
公式ドキュメントは以下のサイトで参照できる。
* [https://www.postgresql.jp/document/ PostgreSQL日本語ドキュメント] (日本語)
* [https://www.postgresql.org/docs/ PostgreSQL: Documentation] (英語)
* <!-- [http://developer.postgresql.org/pgdocs/postgres/ PostgreSQL devel Documentation]--> <del>PostgreSQL devel Documentation (英語, 開発版)</del> ※リンク切れのためコメントアウト
== 概要 ==
=== インストール方法 ===
Fedora の場合、dnf コマンド
sudo dnf install postgresql
sudo dnf install postgresql-server
で入る。
それぞれ、クライアント側(postgresql)とサーバー側(postgresql-server)である。この両方を入れないといけない。片方だけだと、後述の sytemctl が失敗する。データベースサーバーとして postgresql-server を起動して使う仕組みである。
インストールできたと思ったら、とりあえず下記コマンドでバージョン確認をできる。
psql -V
または
psql --version
である。
なお、ヘルプ一覧を見るには<code>psql --help</code>である。<code>h</code>だけだとホスト("host")に「h」が使われているので、ヘルプの意味にならないので、きちんと help と指定しよう。
;初期設定
データベースとしての使用の前には、さらに後述のsytemctlの前に、初期化の設定を下記コマンドで行わないといけない。(そうしないとエラーで失敗する)
sudo postgresql-setup --initdb
=== 起動や終了などの方法 ===
;起動方法
上記のコマンドがすべて終わったら、ようやく、postgresql-server を起動できる。コマンド名にはserver とないが、しかし下記コマンドで起動されるのはデータベースサーバーのほうである。
sudo systemctl start postgresql
なお、sytemctl start は Fedora側のコマンドである。単にそのコマンドを使って postgresql を起動せよ、という命令を上記コマンドでは実行しているにすぎない。
;終了方法
postgresqlサーバー終了は
sudo systemctl stop postgresql
である。
;状態確認コマンド
起動状態の確認コマンドは、起動中(systemctl start postgresql を実行したあとの状態)に、
sudo systemctl status postgresql
である。これを押すと、ターミナル(コマンド端末)画面に、確認結果の情報が列記される。
なお、確認画面の終了方法は q ボタン である。
;接続方法
postgres を使用するためには、インストールしたpostgresのシステムに接続しなければならないが、その際にアカウントが必要になるのだが、当然、あなた個人用のアカウントなんて作成されておらず、「 postgres 」という名のアカウントだけが事前に用意されているので、これを使うことになる。
なので、まずLinux のターミナルのアカウントを変更する必要がある。下記コマンド
sudo su - postgres
でアカウント「postgres」に変更できる。これをしないと、手元のパソコンで通常使用しているユーザー名でpostgresシステムにログインしようとするが、当然ながらそんなアカウント名はインストールしたばかりのpostgresシステムでは作成されていないので、(アカウント名を postgres に切り替えないと)ログインに失敗してしまう。
アカウント名を切り替え終わったら、コマンド
psql -U postgres
でログインできる。
<pre>
[postgres@fedora ~]$ psql -U postgres
psql (14.3)
"help"でヘルプを表示します。
postgres=#
</pre>
のような結果になれば、とりあえず成功である。
なお、終了するには、コマンド
\q
である。つまり、
<pre>
postgres-# \q
</pre>
のような入力画面でエンターすることになる。
これはまだpostgresqlとの接続を終了しただけなので、まだlinuxのアカウントはpostgreのままである。
なので、普段使用している元のアカウントに戻るなら、単に <code>exit</code> コマンドで良い。
exit
=== 試験使用 ===
インストールや初期設定の終わったあとなら、
sudo su - postgres
のあとで、
下記コマンドを実行するだけで、まだなにもデータベースを作成しなくても、データの一覧が表示されます。
psql -l
Fedora 36 にインストールした psql (PostgreSQL) 14.3 での例は、下記のようなデータでした。
<pre>
データベース一覧
名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権限
-----------+----------+------------------+-------------+-------------------+-----------------------
postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(3 行)
</pre>
== データベースの作成方法 ==
たとえば、
sudo su - postgres
で、まず接続する。
そのあと、まず、所有者になるユーザーを専用コマンド<code>createuser</code> で作る。たとえばユーザー名を yamada とするならコマンドは
createuser yamada
となる。
その後、そのユーザー名を、これから作成するデータベースの所有者(owner)名としてデータベース登録を始める。とりあえずデータベース名を testdb とするなら、コマンドは
createdb -O yamada testdb
のようになる。
確認のため、
psql -l
コマンド。すると、下記のように表示される。
<pre>
データベース一覧
名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権限
-----------+----------+------------------+-------------+-------------------+-----------------------
testdb | yamada | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(4 行)
</pre>
のように、作成したデータベースが追加されて
testdb | yamada | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 |
という行が加わり、また最後が「4 行」になっているのが分かる。
このtestdb にログインするには、単に、上記の表示などが見られる postgresQL接続状態にて、コマンド
psql testdb
を実行するだけでいい。
<pre>
psql (14.3)
"help"でヘルプを表示します。
</pre>
のように表示されれば、とりあえずの成功である。
== テーブルの作成 ==
先に
sudo su - postgres
psql mydb
をしておく。
すると、下記の状態になる。
<pre>
psql (14.3)
"help"でヘルプを表示します。
postgres=#
</pre>
<code>CREATE TABLE</code> コマンドで、テーブルを作成できる。
書式は、
<pre>
CREATE TABLE テーブル名 (
列名1 データ型1 補足1,
列名2 データ型2 補足2
);
</pre>
である。「補足」の部分は無くても良く、たとえばNULL値を許容するかどうかの指定などに使う。 NOT NULL などが「補足」にくる。
コード例
<pre>
mydb=# CREATE TABLE test1 (
id integer,
name varchar(30)
);
</pre>
末尾にセミコロンが必要なのを注意。セミコロンを忘れると作成できない。
上記コードを入力すると、自動的に下記のように「CREATE TABLE」という反応が最終行の下に追記され、また入力待ちになるので、下記のような画面になる。
画面
<pre>
mydb=# CREATE TABLE test1 (
id integer,
name varchar(30)
);
CREATE TABLE
mydb=#
</pre>
とりあえず、この画面になれば成功である。
この状態で、入力したテーブルの内容を確認するには<code>\d</code>で可能である。
<pre>
mydb=# CREATE TABLE test1 (
id integer,
name varchar(30)
);
CREATE TABLE
mydb=# \d
リレーション一覧
スキーマ | 名前 | タイプ | 所有者
----------+-------+----------+----------
public | test1 | テーブル | postgres
(1 行)
</pre>
なお、データベース名が「mydb」に変わってるが、単にwiki著者がネット情報を参考にそのデータベース名で作ってしまったから、そうなってる。
これだけだと、まだデータの列名だけを決めただけなので、具体的な中身がない。中身はコマンド <code>insert</code>で入力できる。
つづけて、
<pre>
リレーション一覧
スキーマ | 名前 | タイプ | 所有者
----------+-------+----------+----------
public | test1 | テーブル | postgres
(1 行)
mydb=# insert into test1 values (1, 'tanaka' );
INSERT 0 1
</pre>
のようにinsert コマンド「 insert into test1 values (1, 'tanaka' ); 」を入力すると、
反応「 INSERT 0 1 」が返ってくる。
構文は、
INSERT INTO テーブル名 VALUES (値1, 値2) ;
である。
作成したテーブルの中身を確認したいなら、コマンド<code>select</code>であり、上記の場合なら具体的には
select * from test1;
である。
結果
<pre>
mydb=# select * from test1;
id | name
----+--------
1 | tanaka
(1 行)
</pre>
のようになれば、成功。
つづけて、今後のコマンドの勉強のため、読者には
insert into test1 values (2, 'itoh' );
をしてもらいたい。(あとでこれの消しかたを教える)
つづけて
select * from test1;
をすれば、
結果
<pre>
mydb=# select * from test1;
id | name
----+--------
1 | tanaka
2 | itoh
(2 行)
</pre>
のようになる。
== 項目の削除の方法 ==
では、 idが1のtanaka を消そう。<code>delete</code> で消せる。上記の例なら、
delete from test1 where id=1 ;
で消せる。
構文は
DELETE FROM テーブル名 WHERE 条件式
である。
ともかくdeleteコマンドを実行したら、つづけて確認のため、
select * from test1;
すれば、結果
<pre>
mydb=# select * from test1;
id | name
----+------
2 | itoh
(1 行)
</pre>
となる。たしかに yamada が正しく消せた。
== 関連項目 ==
* [[:en:PostgreSQL/Select without elimination]] - How to use a conditional to narrow down without elimination.
* [[:en:Converting MySQL to PostgreSQL]]
[[Category:PostgreSQL|*]]
[[Category:データベース管理システム]]
ou4cid8e0seatd5lacuntvxnobnelqq
中学校社会 地理/日本のすがた 都道府県と地域区分
0
19152
205675
202196
2022-07-22T14:42:51Z
153.156.95.217
/* さいごに */誤表記の注意
wikitext
text/x-wiki
== 都道府県 ==
日本には、47の都道府県があります。1都(東京都)、1道(北海道)、2府(大阪府、京都府)、43県です。
1871年(明治4年)の<span style="font-size: large;">廃藩置県</span>で、それまであった<span style="font-size: large;">藩</span>(はん)が廃止され、かわりに府(東京府、大阪府、京都府)や県が設置されました。直後は、今よりも多くの県があり、およそ300の県がありました。その後、多くの県が合併をし、1888年までに、最終的に47都道府県になりました。
== 地方区分 ==
[[ファイル:Regions and Prefectures of Japan (ja).svg|thumb|500px|'''8地方区分''']]
=== 7地方区分 ===
日本の地域の分け方には、<span style="font-size: large;">北海道</span>、<span style="font-size: large;">東北</span>、<span style="font-size: large;">関東</span>、<span style="font-size: large;">中部</span>、<span style="font-size: large;">近畿</span>、<span style="font-size: large;">中国・四国</span>、<span style="font-size: large;">九州</span>に分ける、七地方区分(なな ちほうくぶん)があり、この7地方区分がよく用いられます。
場合によって中国・四国地方を別々に分けることで、8地方区分にする場合もあります。
他にも多くの分け方がありますが、まずは、この7地方区分および8地方区分が基本になります。
=== 区分を細かくする場合 ===
さまざまな視点により、もっと細かい分け方で区分を増やす場合もあれば、大まかな見方で区分を減らす場合もあります。
まずは、細かく分けて区分を増やすほうを説明します。
==== 中国・四国地方 ====
* 山陰(さんいん)と山陽(さんよう)
中国地方を、山陰と山陽の2つの地方に分ける場合もあります。
中国山地の北側が山陰であり、中国山地の南が山陽です。
* 山陰と瀬戸内(せとうち)と南四国(みなみしこく)
中国・四国地方をまとめて、山陰・瀬戸内(せとうち)・南四国の3つの地方に分ける場合もあります。
中国山地の北側が山陰であり、四国山地の南側が南四国であり、中国山地と四国山地の間が瀬戸内です。
==== 近畿地方 ====
* 三重県
三重県を、中部地方(東海地方)に入れる場合があります。
・日本海に面する、北部。
瀬戸内海に面する、中部低地。
太平洋に面する、南部。
この三つに分けることができる。
==== 中部地方 ====
* 中部と北陸
中部地方を、南側の中部(静岡県+愛知県+岐阜県+三重県、山梨県、長野県)と、北側の北陸(石川県+富山県+福井県+新潟県)の2つの地方に分ける場合もあります。
* 東海と甲信越と北陸
他にも、北陸(石川県+富山県+福井県)、甲信越(山梨県+長野県+新潟県)、東海(愛知県+岐阜県+三重県+静岡県)の3つの地方に分ける場合もあります。
* 東海3県
静岡県をふくまないで、東海地方と呼ぶ場合もあります。
==== 関東地方 ====
* 北関東と南関東
関東地方を、北関東(茨城県+栃木県+群馬県)と、南関東(東京都+神奈川県+千葉県+埼玉県)の2つに分ける場合もあります。
* 関東甲信越地方
関東地方(東京都+神奈川県+千葉県+埼玉県+茨城県+栃木
県+群馬県)と甲信越地方(山梨県+長野県+新潟県)をまとめて関東甲信越地方と呼ぶ場合もあります。
=== 区分を大まかにする場合 ===
逆に、区分を大まかにして、区分の数を少なくする場合もあります。
* 東日本と西日本
たとえば日本を、東日本(ひがし にほん)と西日本(にし にほん)とに、分ける場合もあります。ただし、べつに法律などで定められているものではなく、その範囲も明確ではありません。
なお、電気機器の周波数では、東日本が50ヘルツ(Hz)であり、西日本が60ヘルツです。
* 北日本と東日本と西日本
ほかにも、北日本、東日本、西日本の3つに分ける場合もあります。
=== さいごに ===
どの県がどの区分に含まれるかは、場合によって7地方区分と一致しない場合があります。たとえば山梨県は、中部地方に含まれる場合もありますが、天気予報や交通などで、山梨県を首都圏(しゅとけん)の一つの県として扱う場合もあります。
※地図で関西地方と表記されているが、関西方面は存在するが関西地方は存在しない事に注意する事。
[[Category:中学校地理|にほんのすかた ととうふけんとちいきくふん]]
o7q0naxmibh9bwsedw1rh67g84iml6v
205678
205675
2022-07-22T14:49:46Z
153.156.95.217
/* 区分を大まかにする場合 */内容追加
wikitext
text/x-wiki
== 都道府県 ==
日本には、47の都道府県があります。1都(東京都)、1道(北海道)、2府(大阪府、京都府)、43県です。
1871年(明治4年)の<span style="font-size: large;">廃藩置県</span>で、それまであった<span style="font-size: large;">藩</span>(はん)が廃止され、かわりに府(東京府、大阪府、京都府)や県が設置されました。直後は、今よりも多くの県があり、およそ300の県がありました。その後、多くの県が合併をし、1888年までに、最終的に47都道府県になりました。
== 地方区分 ==
[[ファイル:Regions and Prefectures of Japan (ja).svg|thumb|500px|'''8地方区分''']]
=== 7地方区分 ===
日本の地域の分け方には、<span style="font-size: large;">北海道</span>、<span style="font-size: large;">東北</span>、<span style="font-size: large;">関東</span>、<span style="font-size: large;">中部</span>、<span style="font-size: large;">近畿</span>、<span style="font-size: large;">中国・四国</span>、<span style="font-size: large;">九州</span>に分ける、七地方区分(なな ちほうくぶん)があり、この7地方区分がよく用いられます。
場合によって中国・四国地方を別々に分けることで、8地方区分にする場合もあります。
他にも多くの分け方がありますが、まずは、この7地方区分および8地方区分が基本になります。
=== 区分を細かくする場合 ===
さまざまな視点により、もっと細かい分け方で区分を増やす場合もあれば、大まかな見方で区分を減らす場合もあります。
まずは、細かく分けて区分を増やすほうを説明します。
==== 中国・四国地方 ====
* 山陰(さんいん)と山陽(さんよう)
中国地方を、山陰と山陽の2つの地方に分ける場合もあります。
中国山地の北側が山陰であり、中国山地の南が山陽です。
* 山陰と瀬戸内(せとうち)と南四国(みなみしこく)
中国・四国地方をまとめて、山陰・瀬戸内(せとうち)・南四国の3つの地方に分ける場合もあります。
中国山地の北側が山陰であり、四国山地の南側が南四国であり、中国山地と四国山地の間が瀬戸内です。
==== 近畿地方 ====
* 三重県
三重県を、中部地方(東海地方)に入れる場合があります。
・日本海に面する、北部。
瀬戸内海に面する、中部低地。
太平洋に面する、南部。
この三つに分けることができる。
==== 中部地方 ====
* 中部と北陸
中部地方を、南側の中部(静岡県+愛知県+岐阜県+三重県、山梨県、長野県)と、北側の北陸(石川県+富山県+福井県+新潟県)の2つの地方に分ける場合もあります。
* 東海と甲信越と北陸
他にも、北陸(石川県+富山県+福井県)、甲信越(山梨県+長野県+新潟県)、東海(愛知県+岐阜県+三重県+静岡県)の3つの地方に分ける場合もあります。
* 東海3県
静岡県をふくまないで、東海地方と呼ぶ場合もあります。
==== 関東地方 ====
* 北関東と南関東
関東地方を、北関東(茨城県+栃木県+群馬県)と、南関東(東京都+神奈川県+千葉県+埼玉県)の2つに分ける場合もあります。
* 関東甲信越地方
関東地方(東京都+神奈川県+千葉県+埼玉県+茨城県+栃木
県+群馬県)と甲信越地方(山梨県+長野県+新潟県)をまとめて関東甲信越地方と呼ぶ場合もあります。
=== 区分を大まかにする場合 ===
逆に、区分を大まかにして、区分の数を少なくする場合もあります。
* 東日本と西日本
たとえば日本を、東日本(ひがし にほん)と西日本(にし にほん)とに、分ける場合もあります。ただし、べつに法律などで定められているものではなく、その範囲も明確ではありません。
なお、電気機器の周波数では、東日本が50ヘルツ(Hz)であり、西日本が60ヘルツです。
* 北日本と東日本と西日本
ほかにも、北日本、東日本、西日本の3つに分ける場合もあります。
* 東日本と近畿と西日本の3つに分ける場合や、東日本・中日本・近畿・西日本の4つに分ける場合もあります。
=== さいごに ===
どの県がどの区分に含まれるかは、場合によって7地方区分と一致しない場合があります。たとえば山梨県は、中部地方に含まれる場合もありますが、天気予報や交通などで、山梨県を首都圏(しゅとけん)の一つの県として扱う場合もあります。
※地図で関西地方と表記されているが、関西方面は存在するが関西地方は存在しない事に注意する事。
[[Category:中学校地理|にほんのすかた ととうふけんとちいきくふん]]
liu4akz8276dd1z9e7jj34phhu76jic
学習方法/高校受験/英語
0
19527
205683
205588
2022-07-22T16:14:17Z
Honooo
14373
/*まず…*/
wikitext
text/x-wiki
{{Notice|'''{{PAGENAME}}'''では、中学校英語高校受験対策の学習方法について解説します。独自研究や中立性を欠いた文章が含まれる場合があります。ご了承ください。}}
==高校受験に向けた英単語学習==
英作文をはじめ、基本的に英語のスペルは正しく書くべきだろう。もちろん試験ではスペル間違いはそれなりに減点、あるいは不可になる。
英単語のスペルを覚えるいい方法、効果的な方法があればよいが、それぞれの学習者の工夫も必要だと思うが、一般的にもさまざまな主張やアドバイスがある。
『進研ゼミ 高校入試情報サイト』では、中学校の英単語学習として、意味や用法を覚え、スペルも書いて練習しようと勧めている<ref name=":0">[https://czemi.benesse.ne.jp/open/nyushi/study/1367896_13980.html]2022年4月25日に確認</ref>。
英単語書き取り練習は漢字練習と同じようなものでしょう。まず中学校必須単語から、一単語あたり5~10回書いて覚えたい。
英語学習では英単語をそれなりの数覚えているのが有効、というのは、多くの人の主張するところで、中学生は中学生として覚えているのが妥当で必要な単語を、意味、スペル、そして出来れば品詞もしっかり覚えていくといいですよね。
しかし単語を覚えただけで、英語の学習バッチリとはならないだろうし、他にも発音や熟語、様々な用法を考慮した文作成や解釈、英語学習の要素は色々ありますよね。
しかし前編集者の推奨はあくまで単語書きとり練習中心、その過程でCD音声や例文読解を取り込めば、総合的な学習になるだろう、という主張<ref name=":0" />。
しかし一方で、書き取り練習は、英単語を覚えるための効果的な学習法ではない、という主張と、それを支持する論文もある<ref>[https://www.jstage.jst.go.jp/article/cogpsy/2005/0/2005_0_104/_article/-char/ja/ 見崎研志, & 仲真紀子. (2005). 記憶促進における反復書記の有効性に関する検討. ''日本認知心理学会発表論文集'', ''2005''(0), 104-104.]</ref><ref>[https://www.jstage.jst.go.jp/article/cogpsy/2006/0/2006_0_171/_article/-char/ja/ 見崎研志, & 仲真紀子. (2006). 反復書記学習が記憶に及ぼす影響. ''日本認知心理学会発表論文集'', ''2006''(0), 171-171.]</ref>。
その場合は、こういうやり方がいいだろう。まず、英単語を見てその意味を思い浮かべる。思い浮かべた意味と真の意味が違っていたら、真の意味を覚えて次の単語に移る。これを覚えるまで何回か繰り返す。こういう学習法が最適だという主張もあります。
また、最近は英単語を覚えるためのスマホアプリなどが登場している。これらを活用することも有効な手段であろう。
実は世の中学習法については諸説紛々で、いろいろな方法を語る人物がいるから、学習者の自主的な判断、選択、発想が必要になるだろう。いろいろ試して自分自身で学習法を見出すことも重要だし、他者の意見を取り入れるにしても、種々の方法を併用して、学習法、勉強とは何かという事を発展的に考えていくことが大切だと思います。
単語学習の方法の視点として、学習するなら覚えるなら、重要度の高い単語から覚えていきたい、そういう考えがありますよね。
もちろん長文や、読解問題では、結局それほど重要だとみなされない単語が使われることも多いので、この視点がどれほど的を射ているかも一考の余地がある。
しかし高校入試の試験問題では、あまり馴染みのない単語には注釈がついている場合が多いので、学習重要語、記憶優先順位というのはやっぱりあると思います。
ただ大筋では、中学校重要単語、高校重要単語と、段階を示す事が出来るでしょうが、実際の試験問題でその分類が徹底的に守られるわけではないでしょう。例えば disappoint「がっかりする」や opinion「意見」などは一般的に、高校 2~3年で学習する単語だと見なされてれているようですが、事実上高校入試で使われている。とはいえほとんどの場合は中学生では難しすぎる単語として、注釈、解説はあるでしょう。
ところで前編集者はやたら中学範囲と高校範囲の分別にこだわるけど、そんなの最初っからあいまいなものでね。結局学校での学習内容なんて、学校により、クラスにより、それぞれ違うもので、あるクラスで学習したことが別のクラスでは学習しない、ある中学課程の本に書かれていることがあるクラスでは学習しない、あるいはその逆、そんなことはしょっちゅうだし、あって当たり前だよ。
そういう差異やあいまいさ、むらを踏まえた上で、統一の試験問題、選考方針で入学者を選ぼうというのが高校入試なんだよね。その差異や違いについていちいち理屈を言って、不平を言って議論するなんて、愚論の極みだろう。
しかもそうやって選考した結果が、絶対の人間判断基準でもない。入試に受かるのも人生なら、落ちるのも人生だよ。
さて、英単語学習の話に戻りますが、例えば中学校向けあるいは高校受験対策向けの英単語集で勉強する道もありますよね。
前編集者の推奨では、この手の単語集の学習では前半部分は飛ばして、と、いうのは、多くの初歩的すぎる単語は別の機会で学習している可能性が高いから、中間の単語から学習するのがいいようですね。そして最後まで学習したら最初に戻る…。あるいは前半部分はもうやらないで、より次の段階の、例えば高校で学習するような単語の勉強に向かうのもいいようです。
==受験勉強の学習範囲==
前項でも書いたように、中学範囲、高校範囲と区別して、その違いにこだわることはあまり意味がないし、その区別も事実上あいまいだ。特に学習すべき単語については、明確に中学単語、高校単語と区別することは、ごく基本的な単語以外、はっきりしない、おおざっぱな物になるだろう。
公立高校の入学試験は、一般的に標準的、基本的な出題が多いので、英単語に関してもそんな難しい単語を使わず、学校教科書の範囲の単語が使用されると思われる。
近年は中学校英語で扱う単語数が増加しているようだ。しかし、基本的には学校で習う単語をよく理解して覚えておくのを現編集者は推奨するが、むしろ少し背伸びして手を伸ばして、高校1年向けの参考書(3000語程度)を学習するのも良いのではないか、という意見もある。
単語集は、高校受験用の単語集はもちろん中学校範囲の単語を扱っていますが、やはり依然として、高校初等の単語集にも手を出すことを勧める意見もある。
ただ県立・都立などの公立高校やごく普通の私立高校では、そんな難度の高い英単語は出てこないでしょう。国立大付属高校の試験でも、それほど英単語難度は高くないようだ。だから多少難易度の高い単語を使用するのは、私立の難易高入試でしょうね。
現編集者は、中学校時の学習は、中学校の範囲をじっくり良く理解すればそれで十分だと考えるが、いやそうではない、ある程度高校範囲を先行したほうが良いという主張も根強くある。ただその場合でも、例えば英単語において、高校3年くらいをターゲットにした難関大学受験用英単語を覚える必要はなく、せいぜい高校初歩、最基本英単語の理解で十分だろう。
前編集者は頑なに、英語の学校教科書と中学用単語集だけではやや受験対策として不足だと主張するが、本当だろうか? 現編集者は、中学生は高校受験も含めて、中学校の学習をしっかりすれば対策として十分だと考える。
と、言うか、それが十分なのに不合格にするような高校、行かなくてもいいのでは?
==難関私立高校==
……とは言え、難関私立高校入試では、英語試験問題としてかなりの難しい出題があるだろう。ある程度成績のいい子はそういう高校に行ってみたい、受験したいと思うだろうし、それは自然な希望だろう。
使用される単語、熟語も、かなり難しい言葉が使われる場合もある。
ただ現編集者は基本的に、優秀な人間の集まりとか、エリートの集まりとか、その辺の存在には全く興味がないので、この問題についてはほぼ何も知らないし語ることもない。だから、前編集をそのまま継承しつつ、幾つかの指摘をしておく。
まず、やはり使われる英単語の難度として、高いものになるだろうから、高校初等の単語集の学習は有用。
しかし、仮にその学習をするにした所で、高校初等重要語3000語を覚えればもう十分だと考えられる。
高校英単語4500語は覚える必要はないだろう。やはりある程度難易度の高い単語には解説がつく。
単語の他に、私立難易高では英作文の出題が目立つ。そのためには少しハードルを下げて、高校1800語をしっかり学習するとよいだろうという指摘がある。
しかしせっかく英作文をするなら、英米人が読んでも妥当な、自然な文章が書けると当然望ましいが、やはり初学者や中学生、ネイティブでもない日本人がいきなりそんな奇麗な文を書けるわけではないので、ある程度許容できると見なされれば、試験ではそこそこ点数になる。
基本的に高校入試とは、中学の学習に関する試験なので、まず中学校の課程をきちんと身に着けて理解することが重要だが、私立の難易高の場合は、少しそれより背伸びした学習も必要かもしれない。
== 文法 ==
===まず…===
中学校で学習する英文法は、我々の英語理解の基本になるものだが、しかし絶対的なものではないだろう。高校では高校で、英文法のアップデートがなされるし、そして高校を卒業した後でも、何度も何度も英文法と言語文法のアップデートはなされていくだろう。
しかし我々は小学校でさらっと英語を知った後、中学校で最初に割と深く英文法を学習することになる。これは受験対策でもそうでなくても、よく理解しておきたい。受験勉強として取り組むなら、受験標準問題集による演習でもよいし、参考書類での理解を主軸にした学習でも良いだろう。
このページは高校受験対策がテーマだから、問題集での演習を勧める人が多いし、もちろんそれはそれで有用だが、現編集者はむしろ、各種参考書類での理解と読解を主体にした学習も勧める。
と、いうのは、結局勉強というのは、他者の発する質問や問題に答えることではなく、物事を知り理解することだからだ。そして物事を良く理解して知っているのなら、大抵の問題や質問にはそこそこ解答できる。
=== 古い参考書 ===
古い参考書などはカリキュラムの変更などに伴い、現在の高校入試に適切なものではない可能性があるため、現在のカリキュラムに合った参考書を購入したほうがいいだろう。
=== 私立対策 ===
英単語だと、私立高校などでよく高校レベルの単語を出す高校もあるのですが、しかし文法となると、あまり高校入試では先取り学習を要求しないのが通例です。もしかしたら若干、中学で習わなかった文法でも要求する高校があるかもしれませんが、しかしおそらく高校受験用のやや発展的な一般的な新しい参考書などで対応可能でしょう。
現代では中学生むけの参考書も充実していますし、わざわざ高校生むけを買う必要もうすいです。
;高校の参考書は必要か不要か
高校の参考書は、やさしい参考書であるなら実は2020年代の現代では中学生でも読めますが(1990年代は高校で教えていた仮定法や無生物主語なども、2020年代では中学で仮定法および無生物主語を習うようになったので、現代ではあまり中学英文法と高校英文法との分野の違いは無い)、高校受験の時点で、わざわざ高校生むけの文法参考書を買う必要は無いでしょう。
それでも買いたければどうぞ自己責任で。
;英検2級レベルの文法問題について
英検準2級が、(仮定法ではなく一般の)過去完了や未来完了など、やや複合的な文法を扱います。もしかしたら、英検準2級程度の文法があると、読解しやすい問題を出す私立高校もあるかもしれません。ただし書店の英検コーナーで探しても、英検の参考書ではあまり文法の解説が充実していないので、代わりに高校生向けの参考書のうち、やさしいレベルのものを通読することになるでしょうか。(高校では文法参考書は、学年別には分かれていません。)
どうしても高校受験の段階で文法を先取りするなら、英検準2級程度で十分でしょう。
なお、準2級ではない英検2級の文法事項は、おおよそ高校3年間の範囲です。
私立高校とはいえ、高校入試で仮に仮定法過去完了が出たとしても、推測ですが、せいぜい長文読解などでチラっと出てくるくらいとかで、特に細かい文法知識を要求する設問ではなく、おそらくはおおよその意味を把握するような問題でしょうか。
だとしたら、せいぜい文法参考書を通読するくらいで十分です。
== 発音 ==
発音に関しては、各種参考書や問題集などに乗ってる発音記号や音源などを参考にすればよいだろう。
英単語の発音がわからないとリスニングができないし、スピーキングや実用的な英語会話をしようというときに障害になる。
前編集者は発音の詳細にこだわるよりは単語熟語を覚えるほうが優先だろうと書いているが、高校入試だけに目的を特化する限りは、現編集者も特に異議を述べるつもりはない。
== リスニング ==
都立共通問題英語ではリスニング問題が出題されます。おそらく他県でもリスニング問題は出題されるはずです。
リスニング問題の対策について、リスニング問題には、やはり、日常的に英語教材を聞くというのが一番効果的です。参考書付属のリスニング対策音声を聞くなどして対策しましょう。
YouTubeなどで検索すれば、実際に話されている生の英語をいくらでも聞くことができますが、しかし中学生では語彙や文法の面で、いきなりネイティブの英語を聞き取るのは難しいと思います。もちろん、英語力にとても自身のある人はチャレンジしても構いませんが、しかし高校レベルの単語すら習得できていない中学生の多くにはYouTubeなどは非実用的です。
まず、高校レベルのリスニング教材を習得してからでないと、YouTubeなどに深入りしても、時間の無駄になります。
中学レベルでは、せいぜい、YouTubeの英語動画で英会話の雰囲気を掴んだり、実際の英会話のスピードを知るための参考としてYouTubeなどを視聴してみるぐらいが関の山でしょうか。
なお、前編集で、発音の教育が日本では軽視されてきたという主張があったのですが、間違いです。
CDどころかカセットテープすらも無かった明治や大正の時代、その代わりに国定教科書などで長々と発音の説明しています。「近代図書デジタルアーカイブ」という公共サイトに戦前の教科書があるので、それが証拠です(中高生の人は読みにいく必要ありません)。
ともかく、最近の動向として、リスニングも重視されるようになってきています。
なので、バランスよく勉強しましょう。もちろん、リスニングばかりを勉強して、書き取りも英作文もできないのでは本末転倒で、それはそれで困りますし、海外での実用性も乏しいでしょう。海外でも英作文や読み書きは必要なはずです。
なので、高校受験英語の勉強では、要するに普通に英単語の勉強などと併行して、リスニング教材なども勉強すればいいだけです。
== スピーキング ==
都立高入試では、2023年度からスピーキングテストが導入されます。おそらく、他県でもスピーキングテストが導入されるようになるのではないでしょうか。
== シャドーイング ==
シャドーイングとは、英語を「聞こえたままに」発音する練習方法です。英語の音についての理解が深まるので、リスニングやスピーキング対策に適しています。英文は何でもいいので、手頃なリスニング問題の音声からシャドーイングしてみましょう。また、慣れてきたら英語の曲をシャドーイングしてみるというのもいいでしょう。受験勉強の息抜きにもなりますし、楽しみながら学ぶというのも大切です。
== 英検 ==
英検を取っておくと高校受験において有利になる可能性があります。
東京都の場合、英検3級以上を取っておくと、私立併願や推薦で内申点を加算されるところが多いです。加算される点数は1点の場合が多いですが、加算方法や加算基準は高校により異なるので、公式HPや学校見学などで事前に確認しておきましょう。
英検3級以上は英語で面接官とのインタビューがあるので、英検を取得する場合、その対策が必要になります。
都立高一般入試の場合は英検取得が受験に有利になることはありません。
しかし、推薦の場合は都立私立どちらとも、英検はアピールポイントになるでしょう。
結果的に、英検を入試で使わなかったとしても、英検取得は英語学習のモチベーションになりますし、今の自分にどのくらいの英語力があるか分かったり、今後の英語の学習の指針になったりするので、余裕があれば受験したほうがいいでしょう。
なお、かつて俗に「英検3級が中学卒業レベル、標準的な高校受験レベル」みたいに言われていましたが、あくまで大まかな目安にすぎず(それもかなり大まか)、実際には出題傾向の違いもあり、英検と高校受験では単純には換算できません。なお近年、中学英語の教育範囲が変わり、今まで高校レベルで教えていた文法の一部(たとえば仮定法など)が中学に前倒しになったので、もしかしたら英検3級では高校受験対策としては不適かもしれません。(英検準2級程度のほうが文法的には近いのかもしれません。)
ともかく、一般入試を受けるなら、英検よりもまずは高校受験そのものの対策をするのが優先事項です。英検の対策ばかりして肝心の高校受験英語の勉強をしなければ、一般入試での高校受験英語の成績は当然ながら悪化します。なので、志望校への推薦合格などが確実で無い限りは、あくまで英検対策は補助にするのが安全でしょう。
[[Category:中学校教育|がくしゅうほうほうこうこうじゅけんえいご]]
[[Category:学習方法|がくしゅうほうほうこうこうじゅけんえいご]]
i6ryl3wg8anpyvb5vcqj7k8xcskig3d
205715
205683
2022-07-23T01:43:15Z
Honooo
14373
/* 古い参考書 */
wikitext
text/x-wiki
{{Notice|'''{{PAGENAME}}'''では、中学校英語高校受験対策の学習方法について解説します。独自研究や中立性を欠いた文章が含まれる場合があります。ご了承ください。}}
==高校受験に向けた英単語学習==
英作文をはじめ、基本的に英語のスペルは正しく書くべきだろう。もちろん試験ではスペル間違いはそれなりに減点、あるいは不可になる。
英単語のスペルを覚えるいい方法、効果的な方法があればよいが、それぞれの学習者の工夫も必要だと思うが、一般的にもさまざまな主張やアドバイスがある。
『進研ゼミ 高校入試情報サイト』では、中学校の英単語学習として、意味や用法を覚え、スペルも書いて練習しようと勧めている<ref name=":0">[https://czemi.benesse.ne.jp/open/nyushi/study/1367896_13980.html]2022年4月25日に確認</ref>。
英単語書き取り練習は漢字練習と同じようなものでしょう。まず中学校必須単語から、一単語あたり5~10回書いて覚えたい。
英語学習では英単語をそれなりの数覚えているのが有効、というのは、多くの人の主張するところで、中学生は中学生として覚えているのが妥当で必要な単語を、意味、スペル、そして出来れば品詞もしっかり覚えていくといいですよね。
しかし単語を覚えただけで、英語の学習バッチリとはならないだろうし、他にも発音や熟語、様々な用法を考慮した文作成や解釈、英語学習の要素は色々ありますよね。
しかし前編集者の推奨はあくまで単語書きとり練習中心、その過程でCD音声や例文読解を取り込めば、総合的な学習になるだろう、という主張<ref name=":0" />。
しかし一方で、書き取り練習は、英単語を覚えるための効果的な学習法ではない、という主張と、それを支持する論文もある<ref>[https://www.jstage.jst.go.jp/article/cogpsy/2005/0/2005_0_104/_article/-char/ja/ 見崎研志, & 仲真紀子. (2005). 記憶促進における反復書記の有効性に関する検討. ''日本認知心理学会発表論文集'', ''2005''(0), 104-104.]</ref><ref>[https://www.jstage.jst.go.jp/article/cogpsy/2006/0/2006_0_171/_article/-char/ja/ 見崎研志, & 仲真紀子. (2006). 反復書記学習が記憶に及ぼす影響. ''日本認知心理学会発表論文集'', ''2006''(0), 171-171.]</ref>。
その場合は、こういうやり方がいいだろう。まず、英単語を見てその意味を思い浮かべる。思い浮かべた意味と真の意味が違っていたら、真の意味を覚えて次の単語に移る。これを覚えるまで何回か繰り返す。こういう学習法が最適だという主張もあります。
また、最近は英単語を覚えるためのスマホアプリなどが登場している。これらを活用することも有効な手段であろう。
実は世の中学習法については諸説紛々で、いろいろな方法を語る人物がいるから、学習者の自主的な判断、選択、発想が必要になるだろう。いろいろ試して自分自身で学習法を見出すことも重要だし、他者の意見を取り入れるにしても、種々の方法を併用して、学習法、勉強とは何かという事を発展的に考えていくことが大切だと思います。
単語学習の方法の視点として、学習するなら覚えるなら、重要度の高い単語から覚えていきたい、そういう考えがありますよね。
もちろん長文や、読解問題では、結局それほど重要だとみなされない単語が使われることも多いので、この視点がどれほど的を射ているかも一考の余地がある。
しかし高校入試の試験問題では、あまり馴染みのない単語には注釈がついている場合が多いので、学習重要語、記憶優先順位というのはやっぱりあると思います。
ただ大筋では、中学校重要単語、高校重要単語と、段階を示す事が出来るでしょうが、実際の試験問題でその分類が徹底的に守られるわけではないでしょう。例えば disappoint「がっかりする」や opinion「意見」などは一般的に、高校 2~3年で学習する単語だと見なされてれているようですが、事実上高校入試で使われている。とはいえほとんどの場合は中学生では難しすぎる単語として、注釈、解説はあるでしょう。
ところで前編集者はやたら中学範囲と高校範囲の分別にこだわるけど、そんなの最初っからあいまいなものでね。結局学校での学習内容なんて、学校により、クラスにより、それぞれ違うもので、あるクラスで学習したことが別のクラスでは学習しない、ある中学課程の本に書かれていることがあるクラスでは学習しない、あるいはその逆、そんなことはしょっちゅうだし、あって当たり前だよ。
そういう差異やあいまいさ、むらを踏まえた上で、統一の試験問題、選考方針で入学者を選ぼうというのが高校入試なんだよね。その差異や違いについていちいち理屈を言って、不平を言って議論するなんて、愚論の極みだろう。
しかもそうやって選考した結果が、絶対の人間判断基準でもない。入試に受かるのも人生なら、落ちるのも人生だよ。
さて、英単語学習の話に戻りますが、例えば中学校向けあるいは高校受験対策向けの英単語集で勉強する道もありますよね。
前編集者の推奨では、この手の単語集の学習では前半部分は飛ばして、と、いうのは、多くの初歩的すぎる単語は別の機会で学習している可能性が高いから、中間の単語から学習するのがいいようですね。そして最後まで学習したら最初に戻る…。あるいは前半部分はもうやらないで、より次の段階の、例えば高校で学習するような単語の勉強に向かうのもいいようです。
==受験勉強の学習範囲==
前項でも書いたように、中学範囲、高校範囲と区別して、その違いにこだわることはあまり意味がないし、その区別も事実上あいまいだ。特に学習すべき単語については、明確に中学単語、高校単語と区別することは、ごく基本的な単語以外、はっきりしない、おおざっぱな物になるだろう。
公立高校の入学試験は、一般的に標準的、基本的な出題が多いので、英単語に関してもそんな難しい単語を使わず、学校教科書の範囲の単語が使用されると思われる。
近年は中学校英語で扱う単語数が増加しているようだ。しかし、基本的には学校で習う単語をよく理解して覚えておくのを現編集者は推奨するが、むしろ少し背伸びして手を伸ばして、高校1年向けの参考書(3000語程度)を学習するのも良いのではないか、という意見もある。
単語集は、高校受験用の単語集はもちろん中学校範囲の単語を扱っていますが、やはり依然として、高校初等の単語集にも手を出すことを勧める意見もある。
ただ県立・都立などの公立高校やごく普通の私立高校では、そんな難度の高い英単語は出てこないでしょう。国立大付属高校の試験でも、それほど英単語難度は高くないようだ。だから多少難易度の高い単語を使用するのは、私立の難易高入試でしょうね。
現編集者は、中学校時の学習は、中学校の範囲をじっくり良く理解すればそれで十分だと考えるが、いやそうではない、ある程度高校範囲を先行したほうが良いという主張も根強くある。ただその場合でも、例えば英単語において、高校3年くらいをターゲットにした難関大学受験用英単語を覚える必要はなく、せいぜい高校初歩、最基本英単語の理解で十分だろう。
前編集者は頑なに、英語の学校教科書と中学用単語集だけではやや受験対策として不足だと主張するが、本当だろうか? 現編集者は、中学生は高校受験も含めて、中学校の学習をしっかりすれば対策として十分だと考える。
と、言うか、それが十分なのに不合格にするような高校、行かなくてもいいのでは?
==難関私立高校==
……とは言え、難関私立高校入試では、英語試験問題としてかなりの難しい出題があるだろう。ある程度成績のいい子はそういう高校に行ってみたい、受験したいと思うだろうし、それは自然な希望だろう。
使用される単語、熟語も、かなり難しい言葉が使われる場合もある。
ただ現編集者は基本的に、優秀な人間の集まりとか、エリートの集まりとか、その辺の存在には全く興味がないので、この問題についてはほぼ何も知らないし語ることもない。だから、前編集をそのまま継承しつつ、幾つかの指摘をしておく。
まず、やはり使われる英単語の難度として、高いものになるだろうから、高校初等の単語集の学習は有用。
しかし、仮にその学習をするにした所で、高校初等重要語3000語を覚えればもう十分だと考えられる。
高校英単語4500語は覚える必要はないだろう。やはりある程度難易度の高い単語には解説がつく。
単語の他に、私立難易高では英作文の出題が目立つ。そのためには少しハードルを下げて、高校1800語をしっかり学習するとよいだろうという指摘がある。
しかしせっかく英作文をするなら、英米人が読んでも妥当な、自然な文章が書けると当然望ましいが、やはり初学者や中学生、ネイティブでもない日本人がいきなりそんな奇麗な文を書けるわけではないので、ある程度許容できると見なされれば、試験ではそこそこ点数になる。
基本的に高校入試とは、中学の学習に関する試験なので、まず中学校の課程をきちんと身に着けて理解することが重要だが、私立の難易高の場合は、少しそれより背伸びした学習も必要かもしれない。
== 文法 ==
===まず…===
中学校で学習する英文法は、我々の英語理解の基本になるものだが、しかし絶対的なものではないだろう。高校では高校で、英文法のアップデートがなされるし、そして高校を卒業した後でも、何度も何度も英文法と言語文法のアップデートはなされていくだろう。
しかし我々は小学校でさらっと英語を知った後、中学校で最初に割と深く英文法を学習することになる。これは受験対策でもそうでなくても、よく理解しておきたい。受験勉強として取り組むなら、受験標準問題集による演習でもよいし、参考書類での理解を主軸にした学習でも良いだろう。
このページは高校受験対策がテーマだから、問題集での演習を勧める人が多いし、もちろんそれはそれで有用だが、現編集者はむしろ、各種参考書類での理解と読解を主体にした学習も勧める。
と、いうのは、結局勉強というのは、他者の発する質問や問題に答えることではなく、物事を知り理解することだからだ。そして物事を良く理解して知っているのなら、大抵の問題や質問にはそこそこ解答できる。
===古い参考書===
古い本にももちろん内容はあるが、高校受験勉強をするなら、毎年最新の情報と教材をもとに学習するのが一番望ましいだろう。
=== 私立対策 ===
英単語だと、私立高校などでよく高校レベルの単語を出す高校もあるのですが、しかし文法となると、あまり高校入試では先取り学習を要求しないのが通例です。もしかしたら若干、中学で習わなかった文法でも要求する高校があるかもしれませんが、しかしおそらく高校受験用のやや発展的な一般的な新しい参考書などで対応可能でしょう。
現代では中学生むけの参考書も充実していますし、わざわざ高校生むけを買う必要もうすいです。
;高校の参考書は必要か不要か
高校の参考書は、やさしい参考書であるなら実は2020年代の現代では中学生でも読めますが(1990年代は高校で教えていた仮定法や無生物主語なども、2020年代では中学で仮定法および無生物主語を習うようになったので、現代ではあまり中学英文法と高校英文法との分野の違いは無い)、高校受験の時点で、わざわざ高校生むけの文法参考書を買う必要は無いでしょう。
それでも買いたければどうぞ自己責任で。
;英検2級レベルの文法問題について
英検準2級が、(仮定法ではなく一般の)過去完了や未来完了など、やや複合的な文法を扱います。もしかしたら、英検準2級程度の文法があると、読解しやすい問題を出す私立高校もあるかもしれません。ただし書店の英検コーナーで探しても、英検の参考書ではあまり文法の解説が充実していないので、代わりに高校生向けの参考書のうち、やさしいレベルのものを通読することになるでしょうか。(高校では文法参考書は、学年別には分かれていません。)
どうしても高校受験の段階で文法を先取りするなら、英検準2級程度で十分でしょう。
なお、準2級ではない英検2級の文法事項は、おおよそ高校3年間の範囲です。
私立高校とはいえ、高校入試で仮に仮定法過去完了が出たとしても、推測ですが、せいぜい長文読解などでチラっと出てくるくらいとかで、特に細かい文法知識を要求する設問ではなく、おそらくはおおよその意味を把握するような問題でしょうか。
だとしたら、せいぜい文法参考書を通読するくらいで十分です。
== 発音 ==
発音に関しては、各種参考書や問題集などに乗ってる発音記号や音源などを参考にすればよいだろう。
英単語の発音がわからないとリスニングができないし、スピーキングや実用的な英語会話をしようというときに障害になる。
前編集者は発音の詳細にこだわるよりは単語熟語を覚えるほうが優先だろうと書いているが、高校入試だけに目的を特化する限りは、現編集者も特に異議を述べるつもりはない。
== リスニング ==
都立共通問題英語ではリスニング問題が出題されます。おそらく他県でもリスニング問題は出題されるはずです。
リスニング問題の対策について、リスニング問題には、やはり、日常的に英語教材を聞くというのが一番効果的です。参考書付属のリスニング対策音声を聞くなどして対策しましょう。
YouTubeなどで検索すれば、実際に話されている生の英語をいくらでも聞くことができますが、しかし中学生では語彙や文法の面で、いきなりネイティブの英語を聞き取るのは難しいと思います。もちろん、英語力にとても自身のある人はチャレンジしても構いませんが、しかし高校レベルの単語すら習得できていない中学生の多くにはYouTubeなどは非実用的です。
まず、高校レベルのリスニング教材を習得してからでないと、YouTubeなどに深入りしても、時間の無駄になります。
中学レベルでは、せいぜい、YouTubeの英語動画で英会話の雰囲気を掴んだり、実際の英会話のスピードを知るための参考としてYouTubeなどを視聴してみるぐらいが関の山でしょうか。
なお、前編集で、発音の教育が日本では軽視されてきたという主張があったのですが、間違いです。
CDどころかカセットテープすらも無かった明治や大正の時代、その代わりに国定教科書などで長々と発音の説明しています。「近代図書デジタルアーカイブ」という公共サイトに戦前の教科書があるので、それが証拠です(中高生の人は読みにいく必要ありません)。
ともかく、最近の動向として、リスニングも重視されるようになってきています。
なので、バランスよく勉強しましょう。もちろん、リスニングばかりを勉強して、書き取りも英作文もできないのでは本末転倒で、それはそれで困りますし、海外での実用性も乏しいでしょう。海外でも英作文や読み書きは必要なはずです。
なので、高校受験英語の勉強では、要するに普通に英単語の勉強などと併行して、リスニング教材なども勉強すればいいだけです。
== スピーキング ==
都立高入試では、2023年度からスピーキングテストが導入されます。おそらく、他県でもスピーキングテストが導入されるようになるのではないでしょうか。
== シャドーイング ==
シャドーイングとは、英語を「聞こえたままに」発音する練習方法です。英語の音についての理解が深まるので、リスニングやスピーキング対策に適しています。英文は何でもいいので、手頃なリスニング問題の音声からシャドーイングしてみましょう。また、慣れてきたら英語の曲をシャドーイングしてみるというのもいいでしょう。受験勉強の息抜きにもなりますし、楽しみながら学ぶというのも大切です。
== 英検 ==
英検を取っておくと高校受験において有利になる可能性があります。
東京都の場合、英検3級以上を取っておくと、私立併願や推薦で内申点を加算されるところが多いです。加算される点数は1点の場合が多いですが、加算方法や加算基準は高校により異なるので、公式HPや学校見学などで事前に確認しておきましょう。
英検3級以上は英語で面接官とのインタビューがあるので、英検を取得する場合、その対策が必要になります。
都立高一般入試の場合は英検取得が受験に有利になることはありません。
しかし、推薦の場合は都立私立どちらとも、英検はアピールポイントになるでしょう。
結果的に、英検を入試で使わなかったとしても、英検取得は英語学習のモチベーションになりますし、今の自分にどのくらいの英語力があるか分かったり、今後の英語の学習の指針になったりするので、余裕があれば受験したほうがいいでしょう。
なお、かつて俗に「英検3級が中学卒業レベル、標準的な高校受験レベル」みたいに言われていましたが、あくまで大まかな目安にすぎず(それもかなり大まか)、実際には出題傾向の違いもあり、英検と高校受験では単純には換算できません。なお近年、中学英語の教育範囲が変わり、今まで高校レベルで教えていた文法の一部(たとえば仮定法など)が中学に前倒しになったので、もしかしたら英検3級では高校受験対策としては不適かもしれません。(英検準2級程度のほうが文法的には近いのかもしれません。)
ともかく、一般入試を受けるなら、英検よりもまずは高校受験そのものの対策をするのが優先事項です。英検の対策ばかりして肝心の高校受験英語の勉強をしなければ、一般入試での高校受験英語の成績は当然ながら悪化します。なので、志望校への推薦合格などが確実で無い限りは、あくまで英検対策は補助にするのが安全でしょう。
[[Category:中学校教育|がくしゅうほうほうこうこうじゅけんえいご]]
[[Category:学習方法|がくしゅうほうほうこうこうじゅけんえいご]]
rccoee6ukcjej9zyu1le18fly01tyzb
中学校社会 公民/平等権
0
22348
205716
202729
2022-07-23T07:01:41Z
Nermer314
62933
/* 外国人について */
wikitext
text/x-wiki
{{stub}}
== 平等権 とは ==
自由権だけがあっても生まれによる差別があっては、民主主義は達成できません。
もし、生まれによって、法律にしたがわなくてよい人がいては、憲法や法律による民主主義は、機能しません。
また、性別を基準としての、不合理な差別があっても、民主主義は達成できません。第二次大戦後の日本では、参政権によって、男女とも20歳以上の選挙権を認めていますが、日本国憲法では、さらにふみこんで、性別による差別をゆるさないというような主張を憲法14条などで決めています。
このように、人間は、生れながらにして、誰もが個人としての尊厳を保障されなければ、なりません。
そこで、日本国憲法では、人はだれもが、法の下(もと)に平等であることを確認しています(いわゆる「'''法の下の平等'''」(ほうのもとのびょうどう). ※「下」の漢字に注意、「元」(×)ではない)。
もちろん、子どもといえども基本的人権があります。子どもにも生命の権利はあり、子どもの生命をうばう事は、許されません。このように、子どもといえども、基本的人権の例外ではありません。
しかし、子どもは、飲酒・喫煙の制限を受けるなど、さまざまな制限を受けます。このような、子どもへの制限は、法律的に許されます。
また、学力試験や適性試験などの成績・得点によって、公立学校などへの進学先が変わってきたりすることは、認められています(※ 帝国書院 の見解)。そのかわり、公的機関への進学先・就職先などを決める試験の機会は、日本国民なら、だれもが生れながら均等に与えられていなければなりません。
つまり、「平等」といっても、専門知識、知力・体力などの能力のちがいによって、就職先がちがったり、進路がちがうことを認めないという意味ではありません。(「つくる会」の見解。検定合格する見解でもある)
また、職場の上司と部下とのあいだの、仕事中の上下関係をみとめないという意味での平等ではありません。(「つくる会」の見解。検定合格する見解でもある)
憲法が保障する平等とは、おもに、法は、だれに対してでも強制力をもつという意味の、'''法の下の平等'''(ほうの'''もと'''のびょうどう)のことです。
=== 男女の平等 ===
たとえば、男女において、就職や進学の機会や、義務教育の内容が、もし仮に、特別な理由(健康上の理由など)もないのに、機会が大きくちがっているとしたら、きっと、平等に反する行為でしょう。(※ 実際には、女子校などもあるので、ややこしいが。なので、ときどき、国公立の女子大のあつかいで、男性からの裁判も起きている。)
労働についての法律においては、'''男女雇用機会均等法'''(だんじょこようきかい きんとうほう)が定められています。97年の均等法の改正により、募集や採用において、男女で賃金や採用条件などの格差をもうけることは、差別とされ、許されなくなりました。
家庭においても、夫婦間の家庭内暴力(かていない ぼうりょく、ドメスティック・バイオレンス、DV)は、許されません。夫から妻への暴力がゆるされないだけでなく、妻から夫への暴力も許されません。
日本国憲法では、結婚は、結婚をしようとする両性双方の合意だけが必要であり、夫婦どうしの結婚の機会は、対等です。
=== 身分のない、平等 ===
なお、大日本帝国憲法の時代にあった華族(かぞく)や貴族(きぞく)などの制度は、日本国憲法では認められていません。つまり、第二次世界大戦後の日本には、法律のさだめている貴族や華族はいません。
=== 民族、人種の平等 ===
アイヌ民族などにも、差別があってはいけません。
また、黒人などに、肌のいろを理由とした差別があってはいけません。
在日韓国・朝鮮人への差別もあってはいけません。意志に反して日本に連れてこられ働かされた人達とその子孫も多くいます。そんななか、今これらの人達に対する就職や結婚などでの差別がなくなっていません。歴史的事情に配慮して人権保障を推進していくことが今後求められます。
=== 外国人について ===
外国人に対しては、その外国が、日本と国交のある外国なら、どこの国籍の外国人でも、原則として、外国人としての等しい扱いを受けるべきでしょう。
なお、日本国は、韓国とは国交があり、北朝鮮とは国交がありません。
また、韓国・北朝鮮のある朝鮮半島は、第二次世界大戦に日本が敗戦する前までは、日本国の植民地であり、事実上の日本領土であったので、在日韓国人・在日朝鮮人は単に不法入国した外国人とはちがうが(そういう人も中にはいるかもしれないが)、特別な配慮が必要です。
また、出かせぎ労働などで、日本に来ている在日ブラジル人や在日中国人などは、不法入国でないとすれば、正式な法手続きをふまえて来日してるわけですから、権利は、それなりに保障されなければなりません。
たとえば、外国人の子どもの教育などでも、日本の公立の小中学校に進学してる場合は、教育の機会を保障するために、特別な配慮をすべきだろうと、現状では考えられています。
=== 障害者への平等 ===
最低限度の生活の保障をしている社会権(しゃかいけん)とも関わることなのですが、身体障害などの障害者であっても、義務教育を受ける権利は、保障されなければなりません。たとえば、学校の検定教科書には、視力がよわい人のために、とくべつに文字の大きい教科書も、存在しています。
また、公共機関は、車イス利用者などの身体障害者でも利用できるように、なるべく、入り口にはスロープ(ゆるやかな坂)などをつけるべきだとされています(いわゆる「バリアフリー」)。
もし、その公共施設の建築構造上の理由で、どうしても車イス利用などのためのスロープを追加することが困難な場合には、その施設の人が介助者となって、入場などを手伝う必要があるでしょう。
== 「差別かどうか?」の問題 ==
:※ 帝国書院などで記述があります。
本ページ上記では、説明を簡単にするために、法律的に明確に禁じられている差別や、あるいは政府などがその分野における差別を規制しようとしている事柄(ことがら)を中心にあつかってきました。
ですが、実際には、ある対応が、法律で許されないような「不合理な差別」に当たるかどうかを決めることは、社会には多様な意見があるので、なかなか容易なことではありません。
また、たとえば障がい者であっても、たとえば平等な機会にもとづく選抜試験の結果、障がい者の成績が悪かったとして、その成績の悪さを理由として選抜されずに、好成績の者よりも不利な状況になることもあるのは、程度の問題もありますが、日本では現状、それは差別ではありません(※ 帝国書院の見解)。
ps503a95178ozpw26nqcs44dluh2fen
高等学校情報/社会と情報/情報社会における権利と義務
0
22440
205673
205647
2022-07-22T12:19:57Z
椎楽
32225
研究倫理はコラムではなく発展事項とすべき。他、冗長な個所を統合整理。なお、一部のですます調を直していないのは、後日修正予定のため。
wikitext
text/x-wiki
== 知的財産権 ==
: ※ 『[[中学校技術/情報通信ネットワークと情報モラル]]』に、知的財産権や著作権や産業財産権などについての説明があります。
人間が書いた文章や、人間がつくった音楽、さらには人間が考えてつくった工業製品、人間がつくったコンピュータソフトウェアなど、人間が考えて公表したアイデアはすべて'''知的財産'''(ちてき ざいさん)です。
法律では、その知的財産を考えた人の権利を、'''知的財産権'''として守っています。
知的財産権は、発明などにかかわる'''産業財産権'''(さんぎょう ざいさんけん)と、小説や音楽や絵画などにかかわる'''著作権'''(ちょさくけん)とに分かれます。
=== 著作権と産業財産権 ===
'''産業財産権'''は、特許庁に出願して登録を認められる必要がある。
商標権や意匠権、特許権、実用新案権が、産業財産権である。
* 商標権(しょうひょうけん) ・・・ ブランド名やロゴマークなどの権利。
* 意匠権(いしょうけん) ・・・ 工業製品の形や模様などのデザインの権利。
* 特許権(とっきょけん) ・・・ たとえば液晶に関する発明や、リチウムイオン電池に関する発明など、発明のうち高度なものについて与えられる、独占的な権利。最長で'''20年間'''、与えられる。
* 実用新案権(じつよう しんあんけん) ・・・ 製品の形状や構造などの発明についての権利。
なお、過去の特許や意匠権などをインターネット上で調べたい場合は、独立行政法人工業所有権情報・研修館のwebサイトで調べられる。
; 関連する法律
;特許;特許について日本では、特許法によって、特許権について定められている。
;実用新案権:実用新案権については、日本では実用新案法によって定められている。
;商標権:商標権については、日本では商標法によって定められている。
;意匠権
:意匠権については、日本では意匠法(いしょうほう)によって定められている。
:また、不正競争防止法の「形態模倣規制」にも意匠権について定められている。
立体商標のように、商標法と不正競争防止法の複数の法令で保護している場合もある。
=== 著作権 ===
著作権の対象は、おもに小説、音楽、絵画、映画などであり、書籍や新聞、書籍、音楽や絵画などでの作品などが対象だが、コンピュータのソフトウェアも著作物に含まれる。
※ (範囲外: ) つまり、「1600年 関ヶ原の合戦」「2017年1月5日、天気は晴れ。」のように単なる出来事を記録したものは、著作権の保護対象にはならない。著作権で保護されるためには、思想や感情を表現する事が必要である。なので、単なる出来事やデータの記述は、著作権の保護対象にならない。
たとえ幼児の描いた絵画であっても、あるいはアマチュア作曲家の作曲した曲でも、著作権での保護対象になる。著作権法で要求される芸術性あるいは創作性とは、作家が芸術性や創作を目指したものであれば充分であり、けっして技巧のうまさは要求しない。けっして、その作品の価値が、えらい肩書きをもった芸術家に認められなくても、あるいは美大や音大や芸大の教授に作品価値を認められなくても、誰かが小説や絵画をつくりさえすれば、その作品は著作権の保護対象物である。
つまり、プロかアマチュアかに関係なく、芸術性・創作性のある著作物をつくれば、著作権の保護対象になる。著作者が、大人か子供かにも関係なく、芸術性・創作性のあるのある作品を作りさえすれば、著作権の保護対象になる。
つまり、ある著作物が、著作権法で保護されるためには、その著作物が、思想や感情を(小説や絵画などの)創作的手法で表現したものである事が必要である。だが、その思想や感情そのものの創作性は、いっさい要求されない。つまり、すでに充分に知られた思想であっても、それを(小説や絵画などの)創作的手法で表現さえしていれば、著作権法での保護に値する。
'''著作権'''は、その著作物を創作した時点で権利が発生し、その創作者自身が著作者となり、創作者自身が著作権者になる。
'''著作権法'''により、著作権についての決まりが定められている。
著作権の保護期間は、日本では、原則として、公表後から著作者の'''死後70年'''まで、である。ただし映画は、公表後から著作者の死後70年まで、である。
:(※ 範囲外 : 映画の著作者) 「映画の著作者とは誰か?」というのは、法律でも不明確である。映画の監督なのか、主要なスポンサー企業なのか、脚本家なのか、原作小説があれば原作者なのか、いったい誰が著作権者なのだろうか。映画の著作権の有効期間の計算では、誰に合わせるべきか。また、制作会社の企業を仮に法人(ほうじん)、つまり法律上の人として考えた場合、企業は人間と違って、寿命が無い。このような問題もあってか、映画の著作権の有効期間の計算では、その映画の初公開を基準に計算する。
:
:※ 著作権法では、実は「映画」とは何か、細かい定義は無い。なので、映画館で見ないビデオ作品やビデオ録画映像やテレビ番組などは、はたして「映画」に入るのかどうか、実は、なやみどころであるようだ。とはいえ、判例や国際的な著作権動向などにより、市販されてるビデオ作品などは、たいてい「映画」と見なされるようである。たとえば参考文献『現代法入門』(三省堂)では、テレビの報道番組は、映画の著作物と見なされる、と紹介している。
:
また、著作権の一部は、財産的な権利であると見なされるので、他人に譲渡できるし、著作者の死後には相続もできる。
* 著作者人格権
** 公表権 {{---}} 著作物を公開するかどうかを、著作者自身が決める権利。
** 氏名保持権 {{---}} 公開するさいに自分の氏名を公表するかを、著作者自身が決める権利。また、公開するさいに自分の名称(氏名やペンネームなど)をどう表記するかを決める権利。
** 同一性保持権 {{---}} 著作物を許可なく改変されない権利。
* 著作権
* 著作隣接権
** たとえば、音楽作品のレコード製作者やCD製作者などの、著作物を伝達する仕事の人にも、'''著作隣接権'''(ちょさく りんせつけん)という権利がある。
** このため、たとえばベートーベンやバッハなどの、中世や近世のクラシック音楽を、'''現代の人が演奏した'''CDやレコードなどは、たとえ作曲家がずっと昔に死んで著作権が切れていても、現代のCD製作者の著作隣接権は切れてないし、そのCDに演奏を提供した演奏者の著作隣接権もまだ切れていないのが普通なので、クラシックCDであっても、決してCD製作者などの権利者に無許可ではインターネット上に公開してはいけない。
* 複製権(ふくせいけん) {{---}} 著作物を、著者などの権利者に無断で複製されない権利。
* 上演権・演奏権・上映権 {{---}} 著作物を無断で上演・演奏・上映されない権利。
* 口述権(こうじゅつけん)・展示権(てんじけん) {{---}} 著作物を無断で口述したり展示したりされない権利。
* 頒布権(はんぷけん) {{---}} 著作物が映画の場合の権利で、著作物(映画)を無断で譲ったり貸したりされない権利。
* 翻訳権(ほんやくけん)・翻案権(ほんあんけん) {{---}} 無断で翻訳、加工、編曲などされない権利。
* 譲渡権(じょうとけん)・貸与権(たいよけん) {{---}} 無断で譲ったり貸与されたりしない権利。
=== 著作権について ===
=== 著作権 ===
人間がつくった文章や、人間がつくった音楽や歌詞、人間が描いた絵やアニメーション、人間が撮影した写真やテレビ映像や映画などの動画には、すべて'''著作権'''(ちょさくけん)があり、勝手に他人が公開してはいけません。
'''著作権法'''(ちょさくけんほう)という法律によって、著作権のありかたが決められています。
なお、著作権についての国際条約として'''ベルヌ条約'''があり、日本国もベルヌ条約に加盟しています。なので、日本の著作権は、ベルヌ条約などの著作権にかんする国際条約に、なるべく整合性をもつようになっています。
さて、著作権は、その作品をさいしょにつくった人に、権利があります。なので、たとい他人がつくった作品を書き写したりしても、著作権はさいしょにつくった人にあるままです。
:※ 著作権は、登録を必要としません。たとい、なにかの機関(たとえば「著作権保護団体」のような団体名を名乗る機関)に作品を登録しなくても、作品を創作さえすれば、著作権は発生します。(※ 検定教科書の範囲内。たとえば、数研出版『情報の科学』に、そのような記述あり。)
さて、たとい お金を出してお店で買ったイラスト集や音楽CDや映画DVDなどでも、著作権のため、けっしてインターネットなどで公開してはいけません。
イラスト集や音楽CDなどを買ったときに購入品とともに付いてくる権利は、単に、その作品を自分が見てもいいという権利と、自分の家族などがその作品を見てもいいという権利だけなので、インターネットの第三者には勝手に作品を公開してはいけません。
著作権のある物を、著作者以外が許可なく利用することは、法律できびしく罰せられる場合があります。
インターネット上でデジタル化された文章や音楽や映像にも、著作権があります。
また、大人や子どもの区別なく、作品をつくれば、その作品についての著作者になります。たとえば、中学生でも、何か作品をつくって発表すれば、つくった作品についての著作権をもちます。
なお、写真を撮影した場合は、撮影した人のもつ著作権とは別に、撮影された被写体の人に肖像権(しょうぞうけん)があります。
* 範囲外
:※ じっさいには、衣服など工業製品の形にも、その形を考えた人の権利( 意匠権(「いしょうけん」と読む)など )があったりする場合があるのだが、かといって衣服を撮影できないと裸を撮影するハメになってしまうので、慣習では、衣服の場合は例外的に、人物の写真などを公開するという目的なら、インターネットにも公開しても良いという慣習になっている。
:また、他人の作品を公開するかどうかの有無にかかわらず、他人がつくった作品を「自分が作りました」という行為は、法律で罰せられる場合がある。
:※ 著作権は、作家のアイデアを直接には保護しません。(※ 参考文献: 有斐閣『知的財産権概論』、紋谷暢男、2012年第3版) 具体例を考えてみましょう、たとえば、アメリカのあるアニメ会社が「ネズミを主人公にしたアニメをつくったら面白いんじゃないか?」と思ったとして、そのアメリカの会社が実際にそういうアニメを作ったとしましょう。それに対して、数年後に日本のあるマンガ家が、「動物を主人公にしたマンガを書いたら面白いんじゃないか? そうだ、ライオンを主人公にしたマンガを書こう。」とか思って、そういうマンガを書いたとしましょう。一切、その日本のマンガ家の作品は、著作権を侵害した事になりません。
※ 発明家のアイデアを保護する制度は、特許権や実用新案権の制度です。著作権は、アイデアを保護しません。
※ (絵画を描いたり、作曲するなりして、)作品を創作すれば、たとい、その作品に大したアイデアが無くても、著作権によって保護されます。つまり、'''アイデアと著作性とは、切り離されています。'''
※ ある著作物が、「著作権法によって保護される」には、要件として思想や感情が必要ですが、しかし、その思想や感情のアイデアの利用権は、著作権法では保護しません。
※ ただし、'''間接的には、不正競争防止法などによって、商品のアイデアが守られる可能性があります。''' (※ 不正競争防止法については、情報科の検定教科書の範囲外。記述が見当たらない。ただし、公民科目の「政治経済」や「現代社会」のほうで、ひょっとしたら紹介されてる可能性はあるかも?) 芸術作品だって、それを販売したり商用利用すれば、りっぱな商品でしょう。不正競争防止法により、他社商品と類似しすぎている商品は、規制されます。この規制は、いわゆる「コピー商品」を規制する目的です。たとい模倣品が、完全に同じコピーでなくても、ほとんど同じ機能・形態なら、実質的なコピー商品だろうと見なされ、不正競争防止法などにより規制されます。不正競争防止法による「コピー商品」排除の保護期間は、元ネタの商品の販売開始日から3年間です。
== その他の権利 ==
自分の顔や すがた には'''肖像権'''(しょうぞうけん)があり、この肖像権によって、顔写真など(自分を特定できる写真)が無断で撮影されるのを拒否できたり、無断で似顔絵などを書かれるのを拒否できる。
肖像権は著作権ではない。また、肖像権についての法律による定めがない。
しかし、日本では、判例などによって肖像権が認められている。
== 引用や二次利用 ==
=== 引用のさいのルール ===
文章で書かれた書籍などの文章作品は、必要最低限かつ評論や紹介などの正当な目的ならば、著作者の許可がなくても自分の作品の一部に組み入れて発表できます。
このような、他人の著作物を自分の著作物にとりこむ行為を'''引用'''(いんよう)といいます。
引用のさいには、つぎのルールを守る必要があります。
* もとの著作物の題名(出典)および著作者の名称、出版社などを明示すること。
* 引用された文章は、かぎ括弧(『』や「」など)を付けるなどして、引用された部分を、自分の著作した部分と区別できるようにすること。
* あくまで自分の文章が中心で、その中で紹介・批評するために必要な分だけ取り込んでいること。
* 改変を行わない。ただし、文意を損なわないのであれば「(中略)」「(後略)」などで一部を省略してもよい。
* 未発表の著作の引用はできない。
絵画や写真も先ほどのルールを守れば引用することが出来ます<ref>{{Cite web
|url=https://guide.air-u.kyoto-art.ac.jp/guide/9820
|title=論文・レポートを書くために|レポート作成にあたって|学習のアドバイス|air U(エアー・ユー)学習ガイド
|website=guide.air-u.kyoto-art.ac.jp
|publisher=京都芸術大学
|accessdate=2022-07-22
}}</ref>。誤解されがちですが、歌詞もルールを守れば引用は可能です<ref>{{Cite web
|url=https://www.kottolaw.com/column/001453.html
|title=どこまでならOK? ウェブサイトにおける歌詞の掲載~JASRACと京都大学の式辞に関する論争を契機に~
|publisher=骨董通り法律事務所 For the Arts
|accessdate=2022-07-22
}}</ref>。ただし、絵画や写真、映画はもちろん、楽曲や歌詞などの芸術作品は普通の文章に比べてどこまでが必要かの判断が難しいので、気になる場合には著作権に詳しい人に相談した方がよいでしょう。なお、授業での発表など学校内の活動の場合、出典の明記などのルールを守れば、まず大丈夫です<ref>{{Cite web
|url=https://www.bunka.go.jp/seisaku/chosakuken/seidokaisetsu/pdf/92916001_01.pdf
|title=学校における教育活動と著作権, 令和3年改定版
|publisher=文化庁著作権課
|edition=令和3年改定版
|date=2021/03/26
|accessdate=2022-07-22
|page=6
|format=PDF
}}</ref>。
また、芸術作品の場合、引用そのものは適切であったとしても公開方法によってはその他の権利を侵している場合もあります。もし著作権などの権利を侵しているかもしれないと思うのならば、書籍や新聞などの文章だけを引用するのが安全でしょう。
そして、著作権法の範囲ではありませんが、以下の点にも気をつけましょう。自由研究をする場合や大学に入学してからは特に気を付けてください。
* 他人が先に発表した研究成果を、あたかも自分が先に発見したかのように主張しない。
:他人の研究業績を盗む行為であるため、研究者たちの業界からは追放されるおそれが有ります。また、場合によっては、不正競争防止法(ふせいきょうそう ぼうしほう)などに違反する可能性もありうるかもしれない。
:研究業界では、盗作・盗用・剽窃(ひょうせつ)などといった用語が、他人が先に発表した研究成果を、あたかも自分が先に発見したかのように主張した者への批判の意味で使われる事もあります。
* 他人が先に発表した研究成果を紹介する場合には、誤解を招かない形で他人の発見である事を明記する。
* 先行研究者や団体名が不明な場合は、それらの成果を紹介しない。どうしても必要であれば「研究者は不明」などと明記した上で、「なになにという研究成果がある。」と紹介するにとどめる。
=== 出典の表示のしかた ===
* 書籍から引用する場合 {{---}} 最低でも、著者名、その出版物のタイトル、出版社名、出版年、引用ページ番号、を書くこと(こうした情報を書誌情報という)。
* ウェブサイトから引用する場合 {{---}} 最低でも、タイトル、URL、確認した年月日、を書くこと(引用後にページ内容が変更される場合があるので、ページをいつ確認したかを表示する必要がある)。
* 新聞から引用する場合 {{---}} 記事タイトル、新聞紙名、出版年月日、朝刊/夕刊、版、発行地域、該当ページを表示する<ref>{{Cite web
|url=https://www.clib.kindai.ac.jp/search/pdf/guide_quote.pdf
|title=引用と参考文献の書き方
|publisher=近畿大学中央図書館レファレンス課
|date=2022/05/01
|accessdate=2022-07-22
|format=PDF
|quote=④-1 新聞記事(紙の新聞);記事タイトル.新聞紙名.出版年月日,朝刊/夕刊,版, 該当ページ.
;例:セブン&アイ巨額買収に見る流通の未来.日本経済新聞.2020-08-04, 朝刊,p.4.
}}</ref>。
----
{{コラム|※ 範囲外: 「無断引用」という用語について|
たまに作家や出版者などが、発表した著作物に「無断引用を禁止します。」などの一文を掲載していることがあるが、法律的にも慣習的にも著作者に引用の可否を決める権利はない。
そもそも引用は、出典の明記や最低限の範囲の使用、改変をしないなどの条件を満たしているかぎり、著作権者に無断で行うことが法律的にも倫理的にも認められている。そして、ルールを順守した掲載行為のことを引用というのである。だから、「無断引用」という言葉自体が不正確である。ルールを守らず、他人の著作物を自分の著作であるかのようにいつわる行為は「盗作」「{{ruby|剽窃|ひょうせつ}}」などという言葉がある。
では、なぜ引用は無断でもかまわないのだろうか。一般的な考えでは「言論の自由」を確保する目的のためであるとされる。もし、政治などで無断の引用を禁止するような慣行がある場合、権力者が自分たちに不都合な批判に対して「引用の許可を与えない」などと主張して、言論弾圧をすることも可能になってしまう。そのため、「引用を認めません」などと主張する人物がいるのなら、その人の主張は公正な検証を拒否しているとも言える。
なお、類似の言葉に'''無断転載'''という言葉がある。これは、著作者に連絡・許可を得ずに別の媒体(論文・レポート・雑誌・ホームページなど)に著作をコピーして掲載することである。'''これは著作権法第21条と第23条に違反するとされる、明確な違法行為'''である。
「無断引用」という言葉は、明確な違法行為である「無断転載」と混同して生まれたのではないかと考えられる。
}}
=== 著作物の二次利用の許可 ===
[[File:Freedom mark.png|thumb|400px|自由利用マーク]]
著作者が自分の著作物を、他の利用者も自由に利用してもいいと認める場合には、その意志を表示するためのマークがあります。
たとえば、文化庁のさだめた「自由利用マーク」があります。もし、文化庁の「自由利用マーク」を実際に利用する場合には、文化庁のホームページに細かい決まりが書いてあるので、それを確認してください。<ref>クリエイティブ・コモンズについては科目「社会と情報」の範囲外。科目「情報の科学」にてクリエイティブ・コモンズについて習う。</ref>
== フリーウェア、フリーコンテンツの著作権 ==
インターネット上では、著者みずからが無料で公開してるコンテンツ(小説、絵画、音楽などの作品)や、無料で使わせてくれるソフトウェアなどがあります。
このような、無料のソフトウェアを「フリーウェア」「フリーソフト」といいます。また、このような無料コンテンツを「無料ソフト」「無料コンテンツ」などといいます。
これら無料のソフトウェアやコンテンツは、一般に、著作者は著作権を放棄していません。
ユーザが無料で出来ることは、あくまで、ユーザが個人で利用する範囲内です。そのため、商業利用する場合には何らかの許可をとる必要がある場合もあります。また、あたかも自分の著作物であるかのようにいつわることは著作権の侵害にあたります。
{{コラム|発展: 著作権法はアイディアを保護しない|
著作権法では、アイディアは保護されないのです。著作権法とは、文章や絵画・映像や音楽などの具体的な表現の成果物の権利を守る法律であり、けっして、そのアイディアを保護しないのです。
* マンガを例に考えよう
たとえば、マンガの著作権の例なら、たとえば『サザエさん』の設定をまねて、昭和の時代に東京に住む一家の日常をコメディ調に描いたマンガを発表したとしても、著作権法では、きっと合法でしょう。なぜなら、昭和の時代を描くこと自体には著作権による規制はないからです(もしそうだとしたら、誰も昭和時代を描いた著作物を創作できなくなってしまう。もしそうだとしたら(『サザエさん』以降のマンガ家が昭和の時代の日常をコメディ調に描くこと自体に著作権による規制があるとしたら)『ちびまこちゃん』すらも著作権侵害になってしまう)。また、東京に住む一家の日常をマンガで描くことも、著作権では、きっと合法でしょう(主人公が東京都の住人のマンガや小説、映画の一覧は[[w:東京を舞台とした漫画・アニメ作品一覧]]を参照)。 『サザエさん』の原作者の長谷川町子の画風をまねて、自分で形状を新しく考えたキャラクターを描くことにすら、著作権は保護しません(画風に著作権など、ない)。
しかし、もし具体的なサザエやカツオなどのデザインを真似たり、カツオやワカメなどの個々の人物の性格や言動などを真似たりすれば、裁判所に訴えられたときに著作権侵害としての判決を受ける確率が、ぐっと高まるでしょう。
また、画風を『ちびまるこちゃん』風または『アンパンマン』風などにしてサザエやカツオたちのような風貌と性格の人物を描いたり、その人物を主人公にしてマンガやアニメを発表することは、たとえ画風が『サザエさん』風でなくても、裁判所に訴えられたときに著作権侵害としての判決を受ける可能性が、高いかもしれません。
このように、著作権法では、アイディアは保護されません。著作権法で保護されるのは、具体的な表現だけなのです。(実際の著作権裁判では、アイディアと表現の境界が複雑な場合もあります{{要出典|date=2020年5月27日 (水) 18:14 (UTC)}}が、本項ではおいておきます。)
}}
== ファイル共有ソフトと著作権侵害とウイルス ==
ファイル共有ソフトを導入したコンピュータどうしのネットワークでは、有料のソフトウェアや有料の動画や音楽などのコンテンツなどを不正コピーしたファイルが、無料で出回っていることがある。
このような、不正コピーは、著作権侵害行為であり、違法行為である。
ファイル共有ソフト自体は、単にコンピュータどうしの送受信の手段のソフトであり、著作権侵害ではないし、違法ソフトでもない。しかし、ファイル共有ソフトのネットワークでは、ウイルスも多く出回っており、しかも、それらのウイルスが、アイコンを動画ファイルや音楽ファイルなどのアイコンに偽装している場合もある。
※ 一般のネットワークと異なり、ファイル共有のネットワークには管理者などが居ないので、ウイルスなどが放置されやすい。
このような危険性もあるので、ファイル共有ソフトは、あまり用いないほうが安全である。
== 発展: 論文における先行研究の調査と著作権 ==
高校生の皆さんは大学に入学する人も少なくないだろう。場合によっては大学院まで進学するかもしれない。大学以上ではレポートや論文を書くことが多くなる。その際に気を付けるべきことをここで紹介したい。
まず、論文を書くさいには研究成果の盗用の禁止、すなわち「他人の先行研究を、あたかも自分が最初に発見したかのように紹介してはいけない」というルールがある。これは研究の世界では厳しく運用されており、先進国各国の教育行政もそれを容認している。
もし「他人の先行研究を、あたかも自分が最初に発見したかのように紹介してはいけない」というルールにある学生が違反した場合、最悪の場合、その学生はその大学を退学させられる処分になる可能性すらある。また、文部科学省などの教育行政も、そういう論文不正者への退学処分を容認している。それほどまでに、このルールは厳格に運用されている。
しかし、そのことと、著作権法とは別です。
しばしば、大学教員のなかには、この厳格な論文ルールの根拠を勘違いして、「著作権法の根拠によるもの」だという勘違いをしている人が、時々います。
しかし、そうではないのです。著作権法とは無関係に、'''大学制度の教育行政の慣習として'''、適用されているルールなのです。
裏をかえすと、この論文ルールを、論文以外の発表の場所で要求することもまた、著作権法に反している行為でしょう。たとえば「豚が、ぶった。」「布団が、ふっとんだ。」という、よくあるダジャレを発表するさいに、いちいち「誰が発明者か? 先行研究者か?」とか、紹介する義務はないし、そのダジャレを聞いた相手がそのダジャレの発明者を勘違いしてもダジャレ発言者に責任はないし、もしダジャレ発表にそんな先行者紹介の義務(?)とやらを要求してきたり裁判を起こす人がいたら、きっと裁判官には違法な要求だと判断されるでしょう。
しばしば、大学教員のなかには、厳格な論文ルールの根拠を「著作権法によるもの」だと勘違いして、論文発表以外(あるいは学術書以外)の出版物でも、そのルールを要求してくる人がいます。しかし、著作権法では、先行研究者紹介の義務などは、ありません。
* 先行研究は、どこまで調べるべきか?
よく、大学の論文指導で「先行研究を調べろ。」と指導される。他人の過去の研究を調べるのは必要だが、現実には、過去のすべての関連研究は調べられない。
例えばJAXAの研究者ですら、講談社ブルーバックス文庫 『小惑星探査機「はやぶさ」の超技術―プロジェクト立ち上げから帰還までの全記録 (ブルーバックス)』 などの書籍で、先行研究を調べ尽くすのは無理だと主張している。
よって、論文などを書く際における先行研究の調査は、自分の調べられるかぎりで調べ、関連性の高そうな先行研究だけを論文では紹介すればいい。
先に述べた研究の「盗用」(「他人の先行研究を、あたかも自分が最初に発見したかのように紹介してはいけない」)の心配については、意図的に他人の先行研究を隠すようなことをせず、自分の参考にした先行研究をすべて紹介すれば問題は生じない。
もちろん、自分の研究に自分の知らなかった先行研究が見つかったら(もしくは、教えてもらったら)、自分の今後の論文やインターネットの自分のホームページなどで、先行研究を紹介する内容の訂正を追加すればいい。
また、先行研究が見つかりずらい分野とは、そもそも、まだ、その理論がまだまだ分かりづらいなどの理由により、実用化が不十分なために、先行研究が見つかりづらいわけです。だから、少なくとも、あなたの研究しようとしている分野においては、その先行研究の実用化が不十分なわけで、先行研究が見つかりづらいワケですから、まだ実用化の不十分な理論を、実際に実用化させようとするための実験や計算もまた、研究対象になります。
== 脚註 ==
<references />
113zpun4xdj2goyu2x6wj62jsvvpj3u
テンプレート:投稿ブロック依頼
10
31095
205685
176218
2022-07-22T16:22:32Z
Honooo
14373
/* 依頼の書き方の例 */ これも段の深さの問題
wikitext
text/x-wiki
このページでは、'''合意形成が必要な[[Wikibooks:投稿ブロック依頼|投稿ブロックの依頼]]'''を行うことができます。また、このページで投稿ブロックの解除依頼も可能です。
「ブロック」および「ブロック解除」の依頼は、以下の説明をよく読んで依頼してください。
<div style="border:red solid 2px;padding:0 1em;margin:0.5em;">
<p style="text-align:center;font-size:120%;">'''注意'''</p>
'''ユーザー間でトラブルが発生した場合には、いきなりここに掲示するのではなく、まず[[w:Wikipedia:論争の解決]]に従い対話と合意での解決を目指してください。'''それがうまくいかなかった場合、[[Wikibooks:投稿ブロックの方針]]の「投稿ブロックの対象となる行為」をよく読み、該当する場合にここで、以下の説明の手順で投稿ブロックの提案を行ってください。'''
なお、投稿ブロックは懲罰や個人攻撃・報復手段のためにあるものではありません。'''
</div>
== 投稿ブロック依頼と意見の書き込み ==
=== 依頼・コメント資格について ===
原則としてある程度投稿経験のあるログインユーザーのみ依頼可能・コメント可能です。具体的には以下の表に記述しているユーザーに資格があります。(なお、ログインユーザーの投票資格・コメント資格についての制限については当面適用しないとします。)
{| class="wikitable"
!該当者!!依頼!!投票!!コメント
|-
|編集回数50回以上、かつログインしてからの活動期間1ヶ月以上のログインユーザー
|align="center"|○
|align="center"|○
|align="center"|○
|-
|匿名ユーザー(注1)、上記に該当しないログインユーザー(注2)
|align="center"|×
|align="center"|×
|align="center"|×
|-
|被依頼者
|align="center"|-
|align="center"|×
|align="center"|○
|-
|[[Wikibooks:管理者|管理者]]
|align="center"|○
|align="center"|○
|align="center"|○
|-
|}
:(注1)依頼より1時間以内に、ログインしてから「編集回数50回以上かつ活動期間1ヶ月以上のログインユーザー」によって本人であることが明示された場合は依頼を有効とします。これは依頼を出した際にユーザーが誤ってか、もしくはシステム上のトラブルなどで不意にログアウトされてしまった場合、またはログインし忘れた際の救済措置です。
:(注2)ログインユーザーについては、上記の条件を満たさない場合においても、有資格者のユーザーが容認したと見られる場合はコメント及び賛否の表明が許される場合があります。他言語版のウィキブックスや姉妹プロジェクトにまたがる問題が発生した場合などに、資格を有さないログインユーザーに対してもコメントを求める必要が生じるからです。
依頼は具体的に問題点を指摘し、何故投稿ブロックの対象となるのかを他の人にも理解できるように示してください。「対話のための即時ブロック」の必要性やブロック期間に関する提案もあれば書いてください。
=== 依頼の書き方の例 ===
;STEP.1 依頼する年のページの一番下に以下のように書き、セーブします。
<blockquote style="border:black solid 1px;padding:0.3em 1em;margin:0.5em 0">
<nowiki>{{Wikibooks:投稿ブロック依頼/(対象人物の名前)}}</nowiki>
</blockquote>
;STEP.2 依頼文を作成する
セーブすると、そのページに赤いリンクが表示されます。このリンクを開き、以下の要領で依頼文を作成してください。
'''ユーザーのとき'''
<blockquote style="border:black solid 1px;padding:0.3em 1em;margin:0.5em 0">
<nowiki>==== {{User|(対象人物の名前)}} ====</nowiki><br/>
<nowiki>[[記事1]]、[[記事2]]などに著作権侵害のおそれのある投稿を行い、やめるよう依頼しても無視し続けています。対話のためのブロックを願います。~~~~</nowiki>
</blockquote>
'''匿名(IP) ユーザーのとき'''
<blockquote style="border:black solid 1px;padding:0.3em 1em;margin:0.5em 0">
<nowiki>==== {{IPuser|xxx.xxx.xxx.xxx}} ====</nowiki><br/>
<nowiki>[[記事3]]、[[記事4]]、[[記事5]]など、○○関係で連続して白紙化や無意味な記述を追加するなどの悪戯を続けています。差し戻し時の要約欄およびノートへの呼びかけにも応じていません。被害拡大を防ぐためブロックを依頼します。~~~~</nowiki>
</blockquote>
投稿ブロック対象のユーザ名あるいはIPアドレスを示し、具体的な行動を示すため、少なくとも問題のある編集を行った記事およびユーザの履歴をリンクで示してください。また、提案者の署名を<nowiki>「~~~~」</nowiki>(1バイト文字のチルダ4つ)で行って下さい。
次のような依頼は問題点が明らかにならないため、修正などに応じない限り有効とは認められません。
<blockquote style="border:black solid 1px;padding:0.3em 1em;margin:0.5em 0">
<nowiki>==== [[利用者:xxx.xx.xxx.xx]]のブロック依頼 ====</nowiki><br/>
<nowiki>私の書いた記事に対して迷惑行為を繰り返しています。はやくブロックして!~~~~</nowiki>
</blockquote>
:→どこで何をしたのか、それが投稿ブロックに値する行為なのかが不明であるため。
=== コメントの書き方 ===
新規のコメントを書くときには、以下の書式で該当セクションの'''一番下に追加してください'''
<blockquote style="border:black solid 1px;padding:0.3em 1em;margin:0.5em 0">
<nowiki>*(賛成): /(反対): /(保留):/(コメント):/(報告): に続いて意見 --~~~~</nowiki>
</blockquote>
'''意見を書く際には必ず賛成、反対、保留、コメント、その他を冒頭に明確に表明してください'''。ただし、状況に応じて、変形させることは可能です。例:(補足コメント)また、[[Template:RFB]]によるアイコンで投票することも可能です。
また、:(半角コロン)を使用したレイアウトは避けて、*(半角アスタリスク)でのコメントに極力統一してください。階層の変更は特定意見へのコメントのときのみとし、なるべく行わないようお願いします。可読性を上げるため、このページでの意見には<nowiki><br/></nowiki>を用いないでください。同様の理由によりレイアウト、インデント、文字飾りなど、様式については変更することがあります。
=== 終了について ===
個々のブロック依頼は、'''管理者による議論終結の判断で終了します'''。終結が宣言されていないブロック依頼は議論継続中の案件です。
議論終結後の具体的な手順は、[[w:Help:管理者マニュアル 投稿ブロック|管理者マニュアル 投稿ブロック]]または[[w:Help:管理者マニュアル 投稿ブロックの解除|管理者マニュアル 投稿ブロックの解除]]を参照してください。
=== 過去の依頼 ===
依頼の過去ログは[[Wikibooks:投稿ブロック依頼/過去ログ]]を参照
== 関連項目 ==
* [[w:Wikipedia:投稿ブロック依頼]]
* [[Wikibooks:投稿ブロックの方針]]([[Wikibooks‐ノート:投稿ブロックの方針|ノート]])
* [[w:Wikipedia:論争の解決]]
* [[特別:Log/block]] - 最近の投稿ブロックとその解除のログ
* [[MediaWiki:Blockedtext/rangeblock]] - 広域ブロックを実施した場合ここにも記載されます
* [[特別:Ipblocklist|投稿ブロック中のユーザーやIPアドレス]]
* [[w:Wikipedia:CheckUserの方針]]
=== ルールの改訂 ===
ルールの制定や見直し・改訂の提案はいつでも行えます。
* [[Wikibooks‐ノート:投稿ブロックの方針]]でブロックの条件や審議に関しての変更・改訂に関する議論を行います。
* [[Wikibooks‐ノート:投稿ブロック依頼]]ではその他の全般的なことについて議論を行います。
<noinclude>{{DEFAULTSORT:とうこうふろつくいらい}}
[[Category:プロジェクト関連文書用テンプレート]]</noinclude>
c3asrqfd2feueqg81tyrvx1gf2ieorj
Wikibooks:コメント依頼/すじにくシチュー
4
33384
205693
199510
2022-07-22T20:53:42Z
Honooo
14373
/* これまでの経緯 */
wikitext
text/x-wiki
== これまでの経緯 ==
さて、このページ自体は、下の項目のほうが先に書かれたのだが、せっかくスタリオンさんが経緯説明の段落を作ってくれたので、少しだけ書いておきたい。
私がここをメインにアカウントを作ったのが、2014年1月4日(土)。すじにく氏はウィキペディアをメインに2013年4月24日(水)にアカウントを作っているね。
しかし私はアカウント作成時は、興味を持って読んでいた、[[数学/証明]]のページを少しだけ修正しただけで、後は、2019/1 までずっとROM だったんですよ。
そしてこの2019/1 からウィキバーシティで活動をはじめ、こっちのサイトは基本読んで楽しんでいるだけだった。
ただこの頃から、割とここで、すじにく氏を中心に場が荒れていたのは、薄々知って気付いていたんだけど、まああまり気にせず、ウィキバーシティを重視して活動していた。
すじにく氏は割と最初から、アクティブに活動していたようですね。しかも最初の方の文章を見てみると、かなりまじめに礼儀正しく書いていて、いったいいつからグレだしたのか^^;;;…。
しかも最近気づいたけど、管理者やりませんか? なんて声をかけられている時期まである^^;;…。
そして私がこの人物に関して、大きな問題を感じたのは、このページを読んだ時ですね→[https://ja.wikibooks.org/w/index.php?title=%E9%AB%98%E7%AD%89%E5%AD%A6%E6%A0%A1%E7%BE%8E%E8%A1%93I&oldid=152000]。
そもそも絵の上手い下手なんて、主観の要素が大きいんだから勘違いがどうのなんて議論完全に不適なんだよね。しかもネットの創作物を不当に貶めて、意図的に悪意ある印象操作をしている。
そしてこれは本人はほとんど意識ないんだろうけど、このリンク先を読めば、ほとんどの心ある人は非常に問題のある不適切な文章だと、議論の余地なく思うだろう。
そこで私は我慢できずトークページに意見を書いたわけです。[https://ja.wikibooks.org/w/index.php?title=%E3%83%88%E3%83%BC%E3%82%AF:%E9%AB%98%E7%AD%89%E5%AD%A6%E6%A0%A1%E7%BE%8E%E8%A1%93I&oldid=152010]
しかしその後すじ肉しちゅ~氏が更新した文章はこれ→[https://ja.wikibooks.org/w/index.php?title=%E9%AB%98%E7%AD%89%E5%AD%A6%E6%A0%A1%E7%BE%8E%E8%A1%93I&type=revision&diff=152487&oldid=152000]
ああこれは全く改める気ないのね、と思ったので、私自身そんな大した美術創作者ではないけど、まあもっともこのすじ肉しちゅ~氏よりははるかにましな絵描きだと思ってるけど、ちょっと頑張って時間かけて書き直した。[https://ja.wikibooks.org/w/index.php?title=%E9%AB%98%E7%AD%89%E5%AD%A6%E6%A0%A1%E7%BE%8E%E8%A1%93I&oldid=152535]
と、まあまずは一番最初の簡単な経緯のみ書いておきました。
とにかくこの日から私とこの人物の永劫の戦い、ハルマゲドンが始まったわけです^^;;;--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年7月22日 (金) 20:53 (UTC)
== 依頼者のコメント ==
もう我慢の限界だね。この人は大いに問題ありだよ。何らかの対応取るべきだと思う。皆さんどう思います?--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年1月22日 (土) 09:59 (UTC)
思うにこの人物は,本文の論旨で,ただただスネ夫のように社会の多数派,権威を持っている人間,しかし実際には重要な事は何一つせずただ他人を貶めているだけの人間にへつらい同意し,他者を誹謗し愚弄する活動を続け,結局やりたいことはそれだけなんでしょ?この人が出典に出して,あこがれてる人間たち,全部胡散臭いやつばかりだと俺は思うけど…。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年1月22日 (土) 18:46 (UTC)
はっきり言って,毎日毎日この人物の吐き出す大量の駄文に少しでも触れるだけで,ものすごく不快だし不毛だし,ストレス満タンだね。こんなことが続くなら,Wikibooksなんてなくなったほうがよっぽどましだ。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年4月6日 (水) 02:17 (UTC)
兎に角この人物の狂文,駄文がここに吐き出されるスピードを 10 とすると,まともな人がそれを書き直すスピードは 1 だよ。これじゃあもう終わりだね。
しかもこの狂人はその自分のスピードを,自分が優秀なあかしだと思っている。冗談じゃあない,たとえ100のスピードでこんな馬鹿文放ったって。ただの鼻水流した愚か者だよ。もおこのWikiboooksもこの宇宙も熱死するしか道はないようだね。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年4月6日 (水) 03:41 (UTC)
== 被依頼者のコメント ==
== 第三者のコメント ==
以前、私が依頼した文章を再掲載します。2022年現在、このような態度は一切改まっていないことを確認しています。
[[投稿ブロック依頼#利用者:すじにくシチュー]]
-----
(以下、再掲載箇所)
'''1.数々の暴言。特に記事内の暴言。'''
https://ja.wikibooks.org/w/index.php?title=%E7%89%B9%E5%88%A5:%E6%A4%9C%E7%B4%A2&limit=20&offset=0&profile=default&search=%E3%83%90%E3%82%AB&searchToken=3sasjdc70yriv85dnc44b65hl
https://ja.wikibooks.org/w/index.php?title=%E7%89%B9%E5%88%A5:%E6%A4%9C%E7%B4%A2&limit=20&offset=20&profile=default&search=%E7%84%A1%E8%83%BD&searchToken=70z343vlyaaae0oqheriqrxzw
氏の記述には一般の人々を「バカ」「無能」「三流」などと、罵倒した記事があります。氏は「訴訟リスクや著作権侵害など、法的リスクの有無はどうか」を重視しているとおっしゃっていますが、彼自身の記述に「訴訟リスク」を孕んだ記述が多い。これを放置することはWikibooksの信頼性を損なう行為であります。また、彼の一般人への攻撃的な内容を、他のユーザーの修正に任せるというのは、他の執筆者への負担を増す迷惑行為ですらあります。
'''2.記事の私物化。'''すじにくシチュー氏は自分の書いた記事を、あたかも自らのブログか何かと勘違いしていると思しき言動が目立ちます。そのため、批判を受け、自分の意に沿わない内容になると激高し、他の編集者や意見を提示した人々を罵倒することが幾度もありました。その辺りの事情は特に[[大学生活ガイド/理系]]に顕著であります。
'''3.投稿者への態度。特にIPユーザーに対する露骨な侮蔑。'''すじにくシチュー氏はIPユーザーに対して、露骨に侮蔑する態度を見せています。IPユーザーと登録ユーザーに優劣があるわけではないというのを理解できていないのではないでしょうか。過去ログ化されていますが、過去の談話室での「IPアドレスによる編集を禁止しましょう」なる噴飯ものの提案にすじにくシチュー氏のIPアドレスユーザーへの見方がよく表れています。ユーザー間に露骨な差別を認めるかのような行為はwikiプロジェクトの趣旨に反する行為でしょう。
:(2020年3月21日付記)また、個人ページでは特定ユーザー(主に氏と議論した人々)に対して、被害妄想に基づく罵倒を行っており(例:[[利用者:すじにくシチュー#このページの利用法への文句への反論について]]、[[利用者:すじにくシチュー#透視図法]]、[[利用者:すじにくシチュー#他のウィキブックシアンの出鱈目]])、個人ページの利用権を完全に逸脱しているばかりか社会通念上も認められるものではありません。(--[[利用者:椎楽|椎楽]] ([[利用者・トーク:椎楽|トーク]]) 2020年3月21日 (土) 04:12 (UTC))
'''4.ルールの恣意的運用。'''すじにくシチュー氏はルールを恣意的に判断し、しかもそれを相手に押し付けてくる傾向があります。いわば、「他人に厳しく、自分に甘い」ルール理解をしています。例えば、IP115.37.84.198氏の編集を個人攻撃とみなしていますが、その根拠は「記事修正などの解決策があるにもかかわらず他の投稿者を批判すること」だそうです。しかし、討論や批判を禁止するルールはなく、また、それらを個人攻撃とみなすこともすじにくシチュー氏の独断でしかありません。しかも、他人に対してはこうした厳しいルールを適用しようとする一方で、自分の言動に関しては全く振りかえることもない。明らかな個人攻撃をノートページで行っています。
'''5.投稿ブロックを二回受けているにもかかわらず反省の色が見られない。'''氏はこれまで、2016年7月3日と2017年9月28日に投稿ブロック措置を受けています。これは氏の言動への反省を促すものであると思いますが、全く反省の色を見せず、相変わらず自分と意見の対立した人物に対して暴言を吐き続けています。むしろ、ユーザーに対しては「バカ」などのような露骨な暴言を避け、ネチネチとした陰湿な攻撃にシフトしております。
'''6.恫喝的なブロック依頼。'''今回IP115.37.84.198氏への投稿ブロックは同氏への恫喝と考えられます。そもそも「投稿ブロックは懲罰や個人攻撃・報復手段のためにあるものではありません」とあります。しかし、すじにくシチュー氏の今回の投稿ブロック依頼は批判的記述へのこじつけを根拠にしており、IP115.37.84.198氏の編集[[https://ja.wikibooks.org/w/index.php?title=%E5%AD%A6%E7%BF%92%E6%96%B9%E6%B3%95/%E6%99%AE%E9%80%9A%E7%A7%91%E9%AB%98%E6%A0%A1%E5%85%A8%E8%88%AC&oldid=123807]]に対する報復的な措置であります。そればかりではなく、司法で言えば濫訴の類であり、全くの不当行為です。これを放置すれば、すじにくシチュー氏は今後の批判的な記述に対して同様の攻撃を仕掛け、他のユーザーへの萎縮を図る可能性があります。
:'''7.対話拒否'''(2020年3月21日付記)すじにくシチュー氏は反論を受けると自分のページに引きこもり、ネチネチと自分の主張ばかりを垂れ流し、対話から逃避しようとします。また、露骨な議論逃れ用のページも作成したことがありました([[大学受験参考書/数学]])。こうした行為は記事の品質向上の役に立たず、コミュニティを疲弊させるだけです。--[[利用者:椎楽|椎楽]] ([[利用者・トーク:椎楽|トーク]]) 2020年3月21日 (土) 04:12 (UTC)
以上の行為によって、すじにくシチュー氏はWikibooksの品位と信頼性を著しく損ないつつあります。確かに氏は多くの記事を執筆(ただし、粗造乱造のそしりを免れないと思われますが)し、本サイトへの貢献は大でした。しかし、それを鼻にかけている傾向があり、このまま放置すれば、ますます氏は増長し、本サイトの一般利用者への害になる可能性があります。そのため、すじにくシチュー氏に<S>一ヶ月以上</S>無期限(2020年3月21日付記)の投稿ブロック措置を行いますよう、依頼いたします。
(再掲載ここまで)
-----
おそらく、彼/彼女のパーソナリティが変わることはないでしょう。
--[[利用者:椎楽|椎楽]] ([[利用者・トーク:椎楽|トーク]]) 2022年5月15日 (日) 09:26 (UTC)
----
<pre>
「おそらく、彼/彼女のパーソナリティが変わることはないでしょう。」
</pre>
(すじにくシチューのコメント)
↑ 手を動かさないヒトの意見をもとに、私の考えが変わることはありません。お笑い芸人とかじゃないんですから、人気投票を目当てに、手を動かさないヒトの意見を参考にすべきとは思いません。そもそも、そういう人気投票を超越して、実証などをもとに客観的な真実を追求するのが、教育や学問などの世界でしょう。
下記の話は小説家の村上龍の1999年の対談集『最前線』にあるのですが、
対談相手の有名な学校教師との対談で、大意「最近(といっても90年代ですが)の子供、ろくに働いた実績もないのに、生徒に説教すると、偉そうに口答えする」のような事を対談相手の教師が言ってました(手元に書籍がないので、うろ覚え)。
私から見れば、記事を書くために教科書を買ったりして実際に書いてみるという手を動かすことをしない人たちも、その高校生と同類です。
実績のない子供の意見を聞いてくれるのは、子供相手の商売をしている、お笑い芸人だとか漫画業界とか、そういう界隈くらいです。
テレビなどのマスメデイアがそういう幼稚な層相手にも商売しているので、「実績を出さずとも批判が通る」と思っている幼稚な大人も多いのが現状ですが、しかし村上龍の対談集にあるようにそういう幼稚な考えは、理系だとかの真面目な世界では通用しないのが現実です。
私が記事『[[ゲームプログラミング]]』でもゲームプロデューサー広井王子の発言を述べたように、世間の大人のほとんどは、なにもしないままの自分を平均点の「50点」だと思っています。[https://ja.wikibooks.org/w/index.php?title=%E3%82%B2%E3%83%BC%E3%83%A0%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0&oldid=196637 固定リンク: 2022年4月6日 (水) 17:03時点におけるHonooo (トーク | 投稿記録)による版 (LINE VITMAX (トーク) による版 196633 を取り消し)]
しかし、創作の世界では、なにもしなければ0点で、淘汰されます。
wikiという、著作物の世界も、似たようなものだと思います。
しかし、wiki編集者すら、彼らの多くは外野で見ているだけの自分を50点だと勘違いしています。
だから過去、「なにもしないあなたは0点」だという旨の指摘を彼にしても、彼とそのシンパはそれを誹謗中傷だと受け取り、改善をしませんでした。
議論ページなどで文句を言うのではなく、さっさと出典をつけて記事を書くべきだと指摘しても、彼らは耳に入れません。
本来、文系の人こそが、創作や芸能の世界などを参考に、なにもしない自分を「もしかして私、0点かも?」と内省して、なるべく手を動かして記事を作るなどの行動を積極的にしなければなりません。
しかし、彼らはそれが出来ませんでした。だから、なにも記事を書かないことを、彼らは「冷静沈着」だと思い、ますます自己正当化するのです。
私の目から見れば、例えれば絵を書かないヒトが自分の「絵をうまい」と勘違いしているのと同じです。だから、実際に記事を書いてみて、思うように書けないのを、「私(すじにくシチュー)が足を引っ張っているからだ」と被害妄想を抱くのです。
そこまで本気で私の書いた記事での前編集の私の版が邪魔だと思うなら、だったら自分でページをゼロから書き直して、高品質な記事をゼロから作り上げて、管理者を'''実績で'''説得させればいいんですよ。
少なくとも私は、前編集がないゼロから、ひとつの記事あたり数週間ていどで書き上げたんですわ。私ができて、他のヒトができないなら、単にその他のヒトの能力が私より低いだけでしょう。
能力不測の現実を認めてくださいよ。
私が記事を更新するたびに確認が大変なのを、彼は「私が彼に嫌がらせをしているのだ」と、被害妄想を受け取っているフシがあります。
でも、それは彼が面倒くさがりなだけです。
本来、ひとつひとつ出典に当たって、議論して確認するんですよ、原則は。
そういう議論、とっくの昔に、管理者のかげろんさんやtomzoさん達が、やってるんですわ。過去、私が検定教科書を購入せずに参考書だけを参考に中学社会科を編集したところ、管理者の かげろんさん から批判されて、それで検定教科書を購入するように編集スタイルを変えたんですよ。--[[利用者:すじにくシチュー|すじにくシチュー]] ([[利用者・トーク:すじにくシチュー|トーク]]) 2022年5月15日 (日) 19:14 (UTC)
:↑うーん,相変わらず手を動かす自分は偉い,二週間とやらでゼロから書いた自分は偉いか。こりゃあ本当に永遠に戦い続けるしかないね^^;;;
:犬に論語,馬に念仏,すじにく氏に議論かな?^^;;;--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月15日 (日) 19:33 (UTC)
:別に管理者たちがあなたを評価しているとは限らないよ。やはり貴方は大人だからね,中学生や高校生と同じような対応はとらないよ。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月15日 (日) 19:36 (UTC)
:あと俺は村上龍ではなく,村上春樹派^^--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月15日 (日) 19:37 (UTC)
:大体ゼロ点スタートだとして,あなたの今までしてきたことからすると,今マイナス一万点ぐらいかな?^^--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月15日 (日) 19:39 (UTC)
:手を動かす手を動かすってやたら云うけど,結局あなたは地獄の様に暇人なんでしょ? ここで書くことが一番の人生のメインじゃあないの? 他の人は別のメインがあったうえで,余暇としてここに関わってるんだけど…--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月15日 (日) 19:50 (UTC)
:出典出典っていうけど,貴方は自分の意見,世界が無さすぎ。大体世にある本の90%は読む価値のない駄本だし,まともな人はいちいち読まなくてもその手のものに何の内容もないこと解ってるんだけど…--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月15日 (日) 19:57 (UTC)
:客観的な真理として,あなたという人物には大問題あると思うけど…--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月15日 (日) 20:01 (UTC)
:うーん,結局難しいね。議論対話に意味を見出さず,結局本読みながらここで記事を書き続ければ自分は偉いと思ってるようだから,……やっぱり永遠に戦い続けるか^^;;;--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月15日 (日) 20:05 (UTC)
:何で最近の更新の一番上が復讐するなんだよ!!^^;;。じゃあ来いよ。江戸時代は仇討は合法だったんだぜ。^^;;--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月15日 (日) 20:20 (UTC)
:凄いね、死刑に処刑?^^;;;。実は俺はスターリンの気持ちって少しわかるんだよね。感謝とは犬に噛まれたようなものである、ってスターリンの名言、知ってる?^^--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月15日 (日) 21:30 (UTC)
:おい、すじにく。お前、一般人が仕事しているときによくこんな下らないこと書けるな。まぁ、あんたの相手は明日してやるよ。こっちも忙しいんだ。とりあえず、要点だけ書いておくよ。
:#結局あんたが言いたいことは「ここでは俺様が一番偉いんだ。文句を言うな」だろ? たかがその程度のイキリで無駄なByteを使うなよ。
:#あんたが凍っていないのはここの管理体制が崩壊しているから。あんたのクソみたいな編集合戦で無期限ブロックかましたウィキペディアの方がまだ健全だったってこと。
:#俺もお前のクソみたいな記述に「出典出せ」って言ったよな? むしろ、俺のほうがお前に厳しく出典・根拠を求めているぜ。ホントにネトウヨってのは自分のことについても簡単に歴史修正するよな。
:#ついでに言うけど、お前、出典の書き方めちゃくちゃだな。卒論や卒研したのか? '''ホントに法政大学で何を勉強したんだ'''? あ、ごめんごめん。卒業できなかったのはそのせいかw
:#最後にM.ガードナーの名著『奇妙な論理』からの引用(教養文庫版pp.26-29)を紹介してやる。偏執狂のお前さんの特徴にピッタリだよな? 特に1~3は。
:##彼は自分を天才と考える。
:##彼は自分のなかまたちを、例外なしに無学な愚か者みなす。彼以外の人はすべてピント外れである。自分の敵をまぬけ、不正直、あるいは他のいやしい動機をもっていると非難し、侮辱する。もし敵が彼を無視するなら、それは彼の議論に反論できないからだと思う。もしも敵が同じような悪口で仕返しするなら、それは彼がならず者たちと戦っているのだという妄想を強める。
:##彼は自分が不当に迫害され、差別待遇を受けていると信じる。公認の学会は彼に講演させることを拒む。 雑誌は彼の論文を拒否し、彼の本を無視するか、「敵」にわたしてひどい書評を書かせる。ほんとに卑劣なやり方である。こういう反対の原因が、彼の仕事がまちがっていることにあるとは、奇人には 全く思い浮かばない。それはひとえに、確立されたヒエラルキー(自分達の正統思想がひっくり返される事を恐れる科学の高僧たち)の側の盲目的な偏見から生じていると彼は確信している。よこしまな中傷といわれの無い攻撃が絶えず自分に向けられている、と彼は主張するのが常である。彼は自分を、異端のかどで不当に迫害されたジョルダノ・ブルーノ、ガリレオ、コペルニクス、パスツールその他の偉人になぞらえる。
:##彼は最も偉大な科学者や最も確立された理論に攻撃を集中する強い衝動 をもっている。(後略)
:##彼はしばしば複雑な特殊用語を使って書く傾向がある。(後略)--[[利用者:椎楽|椎楽]] ([[利用者・トーク:椎楽|トーク]]) 2022年5月16日 (月) 14:41 (UTC)
:さて。ほぼ寝ている間以外は一日中ウィキブックスにいる「一体どうやって食っているのか」が思いっきり謎なすじにく大先生様に、貧乏暇なしの私めが一筆申し上げるといたしましょう。
:まず、芸術や創作がどーのこーのと言っていますが、アンタ、評価できるほどに完成させていると思っているの? おめでたいノーミソですな。高校歴史や地理をはじめとして穴ぼこだらけのページをもって完成させたと? なにかのギャグですか。前に言ったじゃん。'''デマや間違いだらけ、読者を小馬鹿にしている、豆知識の披露ばかりで読者置いてけぼりのゴミ記事に価値はねーよ。あとさ、以前の病理学のページ見たく、ド素人が数冊の本読んで思い上がって書いた記事なんざ危なっかしくて使えねぇ(お前医師免許かMD持ってんのかよ)。マイナスだ'''。まだ0点の白紙のページの方がマシだよ。
:(すじにく大先生がテンションMAX、脳汁ドバドバ出ているのがよく分かる[[高等学校英語 英単語]]もコンセプト不明・見出しがほとんどないから単語の検索ができない・どういう順序(アルファベット順かコーパス順かなど)で並んでいるかわからない・初歩的な間違いがある・読者置いてけぼりというなかなか香ばしい内容だよね。大先生の知的能力のピークだった高校の頃の「お勉強」を思い出して楽しいんじゃないの? そういうのが伝わってくるから言うのも野暮だとは思ったけどね)
:あと、基本的にウィキってのは共同作業だ。絵画に例えてやろう。アンタの場合は合作での絵で、狂ったデッサンやメチャクチャな色つけ、さらによく見ると何も書かれていないところがボコボコあるのに、「俺がこの絵を描いたんだ文句があるか」と言ってるようなものよ。まずは、定説をちゃんと学んでくれ。そして「ちゃんとしたデッサン」を「描いて」くれよ。
:あと、人の文章を添削することの厄介さに気づかないとは……おめでたいな。お前、人の文章を校正する大変さを知らないんだねぇ。俺は仕事の都合上、校正することが多いけど、その人の意図とかを尊重するために読み込んで、どういうところを生かしてどういうところを修正or削除するかも考える必要があるんだよ。俺もそうだけど、他の人達もアンタの記述を最大限尊重しているから頭を抱えながら修正するんだよ。あんまり、アホなことばっかり言ってると、'''お前の記事を修正する際、一度白紙化してから0から書き直すがそれでもいいかね。そっちの方が俺も楽なんだよ'''。
:あと、引用・出典の書き方がメチャクチャ。まともな学術論文読んで出典の書き方勉強しな。大体、出典を書くべきポイントっていうのはね……
:#他人の文章からの引用。これは絶対に必要だ。
:#定説がないor揺らいでいる場合。あるいは論争が起きている場合。教科書は定説を書くもんだが、ここでは定説への批判を載せてもいいとは思う。もちろん、定説批判に価値があればだが。
:#最新学説の紹介。この理由は上と同じ。
:#読者により深い理解を勧めたい場合。この場合には、出典を書くだけじゃなくて関連書籍も勧めたい。
:まぁ、だいたいこんなところだろう。
:んで、論争になりようのない単語の英訳に無駄に出典を書き散らす、しかしその参考文献が高校生向けの単語問題集って……(失笑)。あのね、どうしてもそういうのを書きたかったら普通は専門辞典/事典を使うもんよ。例えば、政治用語なら政治学事典とかな。その労を惜しむやつがイキってんじゃねぇ。'''お前がしているのは手抜き'''っていうんだよ。辞典/事典を持ってないなら公立図書館行って調べろ。
:で、[[小学校社会/6学年/政治・国際編]]にあった「市町村長(しちょうそんちょう)は、議会と市・町・村の、最高責任者です」という記述(修正済み)は池上彰の本を参照したってお前が以前言い訳していたけど、じゃあそれは何が出典だったんだよ。こういう、肝心なところの出典はほとんど無し。あと、お前が書いた[https://ja.wikibooks.org/w/index.php?title=%E5%AD%A6%E7%BF%92%E6%96%B9%E6%B3%95/%E9%AB%98%E6%A0%A1%E5%80%AB%E7%90%86&oldid=116781 妄想のオンパレード]とか[https://ja.wikibooks.org/wiki/%E5%AD%A6%E7%BF%92%E6%96%B9%E6%B3%95/%E9%AB%98%E6%A0%A1%E5%9B%BD%E8%AA%9E%E5%85%A8%E8%88%AC 興味ないって言ってトンズラこいたやつ]の出典出してくれよ。楽しみにしてるわ。
:マジで、すじにく大先生サマは法政大学で何を学んだんだ? 参考文献の選び方・引用の書き方といったレポートのごく基本からできてねぇ。それとも何か? '''法政大学では「レポートや卒論では単語問題集や雑学本も参考文献として紹介していいよ」って教えていたんか?''' 先行研究や文献の選び方を教えなかったんか?
:俺も仕事帰りで疲れたから、ここまでにしておくよ。早く「太閤立志伝Ⅴ」もプレイしたいし。よかったら、もう少し書き方指南のようなものをしてやるから(しかもタダで!)、まだ文句がアレばどうぞ。まぁ、本来なら法政大学で習っているはずのことなんだがねw--[[利用者:椎楽|椎楽]] ([[利用者・トーク:椎楽|トーク]]) 2022年5月19日 (木) 12:12 (UTC)
S氏の英単語の記事ですが。
各単語の説明でフォーマットが統一されていないのは読み手を意識したものとは到底言い難いです。
また自動詞/他動詞の区別乃至説明もなく、書き手自身が全体像もおぼろげなまま書き散らしただけで体系化された記述では到底ありません。
まるでフリマやバーゲンでかき集めてきた服をジャンル分けもせず片っ端からタンスに詰め込んでるようです。
せめて粗悪品やまがい物の選別くらいはなされるべきです。(その目が養われていればの話ですが)
また本文についても、書籍記載の記述の表現や文字置き換えただけの内容に思え、学生のレポート課題の添削をする時にたびたび遭遇する'''グレーゾーンにカモフラージュした剽窃'''を彷彿とさせます。
高校生向けとはいえ、プロの指導者が英単語帳を一冊作るのに要する年数をご存知ですか?
'''たった一冊(2000語程度)でも4年~6年'''はかかるのですよ。
膨大なデータ収集から始まり、単語の「選定、分類、派生、様式」など素人目では素通りするような要所で手間暇かけられてようやく完成します。
また上にも書かれていますが、引用文献が「受験参考書類」というのは噴飯ものです。一言で申しますと、学生が内輪ノリと即興で書いた文化祭無料配布の英単語帳冊子のような印象です。
連日書き足しているようですが、編集を続行されるのでしたら、一旦今まで書き付けた内容の整理、修正、文献の洗い直しをなされてください。
[[利用者:DS3techcan|DS3techcan]] ([[利用者・トーク:DS3techcan|トーク]]) 2022年5月19日 (木) 22:12 (UTC)
----
[[Category:ウィキブックス|ういきふつくす]]
76xo5e21a0g9pxz3yiknyftnn5tts5z
Wikibooks:サンドボックス
4
33504
205676
205177
2022-07-22T14:46:21Z
193.119.148.202
wikitext
text/x-wiki
<!-- このコメントと説明文は消さないでください -->
{{/説明文}}
{{ActorActress
| 芸名 = 八幡 みゆき
| ふりがな = やはた みゆき
| 画像ファイル =
| 画像サイズ =
| 画像コメント =
| 本名 =
| 別名義 = <!-- 別芸名がある場合に記載。愛称の欄ではありません -->
| 出生地 = {{JPN}},[[熊本県]]
| 出身地 =
| 死没地 =
| 国籍 = <!--「出生地」からは推定できないときだけ -->
| 民族 = <!-- 民族名には信頼できる情報源が出典として必要です -->
| 身長 = 155 [[cm]]
| 血液型 = [[ABO式血液型|A型]]
| 生年 =
| 生月 = 1
| 生日 = 24
| 没年 =
| 没月 =
| 没日 =
| 職業 = [[俳優]]
| ジャンル = テレビドラマ、映画、舞台
| 活動期間 = 2008年 -
| 配偶者 =
| 主な作品 = '''舞台'''<br />『[[私はだれでしょう]]』
| 備考 =
}}
'''八幡 みゆき'''(やはた みゆき、[[1月24日]] - )は、[[日本]]の[[俳優]]。
[[熊本県]]出身。[[日本大学藝術学部演劇学科]]卒業。
8aylqjbbzavdoy14x57zhay3a7ikyxz
205677
205676
2022-07-22T14:49:45Z
193.119.148.202
ページの白紙化
wikitext
text/x-wiki
phoiac9h4m842xq45sp7s6u21eteeq1
205679
205677
2022-07-22T14:54:10Z
193.119.148.202
wikitext
text/x-wiki
<!-- このコメントと説明文は消さないでください -->
{{/説明文}}
e97n3k765d597tbpjog6kit1ib8wuas
小学校社会/6学年/歴史編/国際社会に進み出す日本-明治末期から大正時代
0
33920
205682
205655
2022-07-22T15:39:50Z
Tomzo
248
/* 日露戦争 */
wikitext
text/x-wiki
{{Nav}}
{{Pathnav|メインページ|小学校・中学校・高等学校の学習|小学校の学習|小学校社会|6学年|歴史編|frame=1}}
{| class="wikitable" style="width:100%"
|+ この章の概要
|<!--1889年前後から「国際的地位が向上」(1920年国際連盟成立 常任理事国入り)まで--><!--(コ) 大日本帝国憲法の発布,日清・日露の戦争,条約改正,科学の発展などを手掛かりに,我が国の国力が充実し国際的地位が向上したことを理解すること。-->
★時代区分:明治時代後期、大正時代</br>
★取り扱う年代:1889年(大日本帝国憲法の発布)から1925年(昭和改元)まで
; 大日本帝国憲法の制定
: 明治維新の改革は、五箇条の御誓文の方針によりなされましたが、改革が進み近代文明国としての形がひととおり整ってきたところ、さらに政治の形を確かなものとし、人々の権利を明らかにするため、'''憲法'''の制定と選挙によって選ばれた議員による議会を開くことが求められました。'''板垣退助'''や'''大隈重信'''は国会の開設を求めて、政党をつくりました。'''伊藤博文'''を中心とした明治政府は欧米諸国の憲法を研究し、1885年に'''内閣制度'''が創設され、1889年に'''大日本帝国憲法'''が発布されました。翌年憲法の精神に基づいて、初めて総選挙が行われ'''帝国議会'''(国会)が召集されました。
; 日清戦争と日露戦争
: 急激な近代化に成功した日本は、国内で拡大した産業の新たな市場を求め大陸に進出しようとします。朝鮮は中国の帝国'''{{ruby|清|しん}}'''の属国でしたが、その影響で近代化が進んでおらず、朝鮮国内の近代化を求める人々は日本と協力して清の影響から逃れようとしました。朝鮮国内の清に従う保守派と改革派の争いに日本と清はそれぞれ兵を出すなどして緊張が高まり、1894年朝鮮半島西岸における両国海軍の接触をきっかけに'''日清戦争'''が始まりました。日本は清の北洋海軍を壊滅させ、遼東半島を占領するなど戦いを有利に進め、翌年、'''陸奥宗光'''外務大臣と清の提督である李鴻章が交渉し、清の日本への賠償や台湾・遼東半島の割譲などを定めた下関条約が締結され講和が結ばれました(日本の勝利)。
: 遼東半島はロシア、ドイツ、フランスが反対したので割譲は取りやめとなりましたが(三国干渉)、そこにロシアが進出し、それを警戒する日本と対立しました。1904年日本とロシアは開戦し('''日露戦争''')、日本とロシアは、ロシアが植民地としていた遼東半島や中国東北部(満州)で戦いました。日本は多くの犠牲者を出しましたが、'''東郷平八郎'''がロシアのバルチク艦隊をやぶるなどして有利な位置となり、翌年、'''小村寿太郎'''外務大臣とロシアのウィッテが交渉し、ロシアの中国からの撤退、南満州鉄道の譲渡、南樺太の割譲などを定めたポーツマス条約が締結され講和が結ばれました(日本の勝利)。
; 条約改正と国際社会での地位の向上
: 幕末に欧米各国と結ばれた通商条約(不平等条約)の改正は日本政府の悲願でした。まず、政府は、国内の法整備を進め、公正な裁判が行われることを示し、日清戦争終結後の1899年治外法権を撤廃しました。そして、日露戦争の勝利は、世界に驚きをもってむかえられ、国際的地位も上がったことをうけて、1911年関税自主権も回復しました。
: 1912年大正天皇が即位し、元号が「'''大正'''」となりました。
: 1914年にヨーロッパの国々を二分した'''第一次世界大戦'''が始まりました。日本は、イギリスやフランスの属する連合国に参加し、敵対する同盟国の一つであるドイツが租借する中国の{{ruby|青島|チンタオ}}や南太平洋の島々を占領しました。1919年戦争は連合国の勝利に終わり、翌年、平和を維持するための'''国際連盟'''が設立、日本は英仏などとともに常任理事国の一つとなりました。
: このころになると、日本の科学技術の水準も世界的なものになり、'''野口英世'''のように国際的な研究者がでてくるようになりました。
|}
=== 世界の変化2 - 市民革命 ===
:日本が鎖国をしている間、ヨーロッパやそれを受けたアメリカ大陸では、[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#世界の変化1 - 産業革命|産業革命]]ともうひとつの大きな社会変革が起こっていました。
;市民革命以前のヨーロッパ
:ヨーロッパの国々も長い間、生まれながら身分によって職業などが決められ、多くの人々は農民や職人として土地(荘園)の領主(「{{ruby|封建|ほうけん}}領主」といいます)や都市の貴族などに服従する社会でした。また、この時代は、ローマ教皇を頂点とする'''カトリック教会'''が、強い影響力や荘園を持っていたというのは、[[小学校社会/6学年/歴史編/戦乱の世の中と日本の統一-戦国時代・安土桃山時代#キリスト教|前にお話ししたとおり]]です。この時代を{{ruby|封建|ほうけん}}制<ref>土地(領地)を間に介して、主従関係を結ぶ制度を言います。日本でも、[[小学校社会/6学年/歴史編/武家社会の始まり-鎌倉時代#封建制|鎌倉時代の「'''ご恩と奉公'''」の関係]]はこれにあたりますし、安土桃山時代から江戸時代にかけての[[小学校社会/6学年/歴史編/戦乱の世の中と日本の統一-戦国時代・安土桃山時代#石高制|石高制]]も封建制の一種です。</ref>の時代と言います。
:14世紀くらいになると、都市を中心に商業が発展してきて、豊かな財産を持って、荘園領主よりも強い影響力を持つようになる者もでてきました。15世紀「[[小学校社会/6学年/歴史編/戦乱の世の中と日本の統一-戦国時代・安土桃山時代#大航海時代|大航海時代]]」になると、さらに、貿易や植民地からの収益で都市の商人などは勢力を強くしました。また、繊維工業などを中心に、人を集めて工場などを経営する人たちもあらわれました。これらの、封建領主や貴族ではない階層の人たちを、「{{ruby|市民|しみん}}階級」といいます。これらの、市民階級の経済力を背景に、ヨーロッパの各地で強い力を持った国王が誕生し、伝統的な荘園領主などを圧倒しました。これを、{{ruby|絶対王政|ぜったいおうせい}}の時代といいます。絶対王政の王国は、政治を行う政府は専門の役人をおき、戦争に備えて軍隊を平時から常設するようになりました<ref>封建制の時代は、国王でも自分の荘園をおさめられる程度の役人がいればよく、戦争などでは、その都度、封建領主に命令して軍隊(騎士)を集めていました。</ref>。
;市民革命と近代国家
:市民階級が台頭してくると、封建制度以来の身分制度に対して、生まれながらの身分にかかわらず人間は'''平等'''であり、'''自由'''に発言や経済活動をする'''権利'''('''人権''')を持っているという考え方が広がってきました。また、封建制の時代はおさめている荘園の収穫から政治を行っていましたが、絶対王政の政府は、市民階級からの税金で成り立っていたのですが、税金を取られる市民たちは国王の都合だけで徴税されることに不満を持ち始めました。こうして、17世紀以降、市民階級は絶対王政と対立するようになります。市民階級は代表を出して、政治に参加するようになります。'''議会'''('''国会''')の始まりです。さらには、国王の圧政に対しては、市民階級が集まって武力をもって王政を倒したりしました。これを「'''{{ruby|市民革命|しみんかくめい}}'''」と言います。
:市民革命は、17世紀のイギリスに始まりました ('''清教徒革命'''など)。ひきつづいて、北アメリカ大陸のイギリス植民地が、独立を求めて戦争を起こしアメリカ合衆国が成立しました ('''アメリカ独立戦争''')。そして、1789年代表的市民革命である'''フランス革命'''が起こります。市民革命は、フランスの'''ナポレオン'''が、フランスの革命政府を打ち倒そうとする周辺の国々を逆にせめた戦争によってヨーロッパ各地に広がります。
:市民革命自体は、各国の状況によって様々な結果を生みました。革命後に王政が復活した国もあります。しかし、市民革命で国の政治に身分によらない一般の市民が参加できるようになって、広く国全体から資金を集める仕組みができたこと、また、兵隊に国民が動員されるようになったこと('''[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#徴兵制|徴兵制]]''')から、数が多く強力な軍隊を持つようになり、それまでの、封建的な国や絶対王政の国を圧倒するようになりました。これらの古い体制の国々も、市民階級を国の政治に参加させるように、国の仕組みを変えるようになりました。まず、国民の権利を保障し、国民の代表が参加する'''議会'''を設置して国の政治に参加できるようにしました。そして、そのことを'''憲法'''という、強い力を持った法律に定めるようになりました。
:国が、国王などの所有物ではなく、そこに住む国民によって成立するという近代国家('''国民国家''')の誕生です。
=== 大日本帝国憲法の制定 ===
[[File:Taisuke ITAGAKI.jpg|thumb|125px|板垣退助]]
[[File:OKUMA_Shigenobu.jpg|thumb|125px|大隈重信]]
[[file:Itō Hirobumi.jpg|thumb|125px|伊藤博文]]
:明治になって、[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#四民平等|身分制度がなくなり]]<ref name="華族">実際は、公家や大名、明治政府に大きな貢献のあった人たちについては、{{ruby|公爵|こうしゃく}}・{{ruby|侯|こう}}爵・{{ruby|伯|はく}}爵・{{ruby|子|し}}爵・{{ruby|男|だん}}爵といった貴族の爵位が与えられ、その一族は「{{ruby|華族|かぞく}}」と呼ばれました。華族には、いくつかの特権が認められましたが、華族の数は比較的少ないうえ、江戸時代ほど極端に大きな差ではありませんでしたし、社会的な貢献をすることで、誰でも華族となる機会はありました。また、「士族」と「平民」の間で異なる取り扱いは一切ありませんでした。</ref>、人々は才覚や努力によって、どのような職業に就くこともできるようになりました。人々は、学業をはじめとしたさまざまな努力をして、いろいろな分野で活躍するようになりました。
:明治政府は、さまざまな改革を強引に進めたため民衆と対立することも少なくありませんでした。このような民衆の不満は、[[#士族の反乱|士族の反乱]]の後は、こうした近代思想を取り入れて政治参加を求める{{ruby|自由民権|じゆうみんけん}}運動につながります。自由民権運動は、憲法の制定と、民衆が政治に参加できる選挙を通じた国会の開設をもとめるようになります。自由民権運動は、征韓論で下野した'''[[小学校社会/6学年/歴史編/人物事典#板垣退助|{{ruby|板垣退助|いたがきたいすけ}}]]'''と1881年(明治14年)に'''[[小学校社会/6学年/歴史編/人物事典#伊藤博文|{{ruby|伊藤博文|いとうひろぶみ}}]]'''らと対立して政府を離れた'''[[小学校社会/6学年/歴史編/人物事典#大隈重信|{{ruby|大隈重信|おおくましげのぶ}}]]'''らに主導されました。
:大隈や板垣が主導する自由民権運動の主張は、国民の自由と権利を保障する憲法の制定とそれに基づく国民の選挙による議会(民選議会)の開設及び議会による政府の統制でした。伊藤博文ら明治政府を主導する人たちは、自由民権運動の考えをそのまま受け入れると、政策を政府が思うとおりに進めることができず、富国強兵などの改革政策に差しさわりがあると考え、この運動を弾圧しました。一方で各地の有力者や、新たな産業の成功者が登場してきており、明治政府はこれらの人々の支持を受けたいと思っていました。また、欧米諸国から見ると、民選議会が政治を進めない国は遅れているとの意識があり、不平等条約改正にあたっても説得させることができない理由の一つとなっていました。
:1881年(明治14年)明治政府は、明治天皇名で「国会開設の勅諭」を下し、1889年(明治22年)に国会を開設することを国民に約束しました。これを受けて、自由民権運動の活動家は政党を結成し、同年には自由党が板垣退助を中心として、翌1882年(明治15年)立憲改進党が大隈重信らによって結成されました。
:一方、伊藤は、1882年(明治15年)、憲法制定・国会開設の模範を研究するためためにヨーロッパを視察しました。そこで、伊藤は議会が発達したイギリスや、人権思想が進んでいたフランスではなく、ドイツ帝国の憲法を模範にすることとしました<ref>この頃のドイツは、日本が藩に分かれていたのと同様に、多くの王国・貴族領に分かれていたものを、各地で統一の要望が上がり、その中で有力となったプロイセン国王を皇帝とするドイツ帝国が成立していました。ドイツ帝国は、イギリスやフランスよりも、皇帝(それを受けた行政機関)の権限が強く、議会の力はおさえられていました。ドイツは、英仏に比べ工業化などが遅れていたために、それを推進するために、強い行政の力が必要であったためです。また、各個人の人権についても制限がありました。伊藤が、英仏ではなく、ドイツを国の形の模範としたのは、このように、日本と状況が似ていたためです。</ref>。帰国した伊藤は憲法制定の準備をはじめ、1885年(明治18年)に内閣総理大臣を長とする'''内閣制度'''が創設され、1889年(明治22年)に'''大日本帝国憲法'''(明治憲法<span id="明治憲法"/>)が発布されました。翌1890年(明治23年)7月1日憲法の精神に基づいて<ref>明治憲法が、実際に有効となる(施行される)のは、1890年(明治23年)11月29日なので、まだ、憲法の下の選挙・国会の招集ではありませんでした。</ref>、初めて総選挙が行われ、11月25日'''帝国議会'''(国会)が召集されました。
:明治憲法は以下のことを定めています。
:#天皇は、日本の統治者とされます。
:#国会は、天皇に「協賛」して法律や予算を定める機関とされます。
:#*法律や予算を決めるのは天皇であって、国会は、その補助をしているに過ぎないという考えを表しています。
:#*緊急と認められる時には、天皇<ref>実際は、行政府である政府の仕事です。</ref>は国会の議決によらず、法律に代わる勅令を出すことができました。
:#国会は、貴族院と衆議院により成り立ち、衆議院は選挙によって選ばれた議員により構成され、貴族院は皇族・華族<ref name="華族"/>及び勅命<ref>天皇の命令。実際は、その時の行政府による指名。</ref>で任名された議員により構成されます<ref>ただし、このような議会の成り立ちは、世界的に見ても珍しいものではありませんでした。明治憲法の元になったドイツ帝国の議会が貴族院と衆議院で成り立っていましたし、そもそも、議会政治の模範とされるイギリスも世襲貴族による「貴族院」と選挙で選ばれた議員による「庶民院」で構成されていて、現在もその伝統が残ります。このことで、身分で選ばれた議員による議会を「上院」、選挙で選ばれた議員による議会を「下院」という習慣ができました。アメリカ合衆国には独立当時から貴族制度はありませんでしたが、上院は各州の代表(元々は州議会が選出していましたが、現在は州民の選挙によります)、下院は州にかかわらず選挙で選ばれた議員による議会と、上院と下院で性質を変えていたりします。時代が下るにつれ、選挙で選ばれた議員の決めることが優先されるという政治習慣(下院優先の原則)が有力になります。</ref>。
:#*衆議院の優位などの定めはなく、各議院で議決されなければ法律などは成立しませんでした。
:#*<span id="制限選挙"/>衆議院議員の選挙権は、憲法を定めた当時は、一定以上の税金を納めた者にのみ認められていました。
:#国務大臣は天皇を{{ruby|輔弼|ほひつ}}(助言し助ける)すると定められます。また、内閣総理大臣についての定めはありません。
:#軍隊(陸海軍)は天皇が直接まとめひきいるとされました。また、国民には徴兵に応じる義務がありました。
:#*軍隊は、国会や内閣の命令を聞く必要がないと解釈されるようになります。
:#様々な国民の人権が認められましたが、それは、法律の範囲内で認められるものとされました。
:#*例えば、女性には選挙権は認められることはありませんでした。また、民法で家族や相続は家制度によったため、女性は不利な取り扱いを受けました。
:#*後に制定される治安維持法は、政治思想(特に社会主義思想・共産主義思想)を取り締まる法律でした。
=== 日清戦争と日露戦争 ===
==== 日清戦争 ====
[[File:《马关条约》签字时的情景.jpg|thumb|right|200px|none|下関条約の調印の様子。 向かって左に着席するのが日本の伊藤全権、右が清国の李全権]]
: 急激な近代化に成功した日本は、国内で拡大した産業の新たな市場を求め大陸に進出しようとします<ref>「急激な近代化に成功した日本」と書きましたが、これは、[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#世界の変化1 - 産業革命|前の章の『産業革命』の節]]に書いた「欧米各国は、産業革命で経済力が大きくなりましたが、さらにそれを大きくするため、国内で生産する工業製品の{{ruby|市場|しじょう}}と原材料となる農産物や鉱物資源を欧米諸国の外に求めるようになりました。」の部分を日本に当てはめたものです。しかし、この頃の日本の工業力はまだ近代化が始まったばかりで、外国に市場を求めるまで成長していません。</ref>。朝鮮は中国の帝国'''{{ruby|清|しん}}'''の属国でしたが、その影響で近代化が進んでおらず、朝鮮国内の近代化を求める人々は日本と協力して清の影響から逃れようとしました。朝鮮国内の清に従う保守派と改革派の争いに日本と清はそれぞれ兵を出すなどして緊張が高まり、1894年(明治27年)朝鮮半島西岸における両国海軍の接触をきっかけに'''日清戦争'''が始まりました。日本は清の北洋海軍を壊滅させ、黄海沿岸の軍事拠点を攻撃し、遼東半島を占領するなど戦いを有利に進め、翌1895年(明治28年)、'''[[小学校社会/6学年/歴史編/人物事典#陸奥宗光|{{ruby|陸奥宗光|むつむねみつ}}]]<span id="陸奥宗光"/>'''外務大臣と清の提督である{{ruby|李鴻章|りこうしょう}}が交渉し、以下の事項などを定めた'''下関条約'''が締結され講和が結ばれました(日本の勝利)。
:#清は、朝鮮の独立を認める。
:#清は、日本へ台湾と{{ruby|遼東|<small>りょうとう/リャオトン</small>}}半島<ref name="中国地名">中国の地名については、日本語の音読みで読む方法と現代の中国語に近い音で読む方法があります。後者は、「音読みだと日本人にしか通じない」と言う配慮から現代の中国語に近い音を当てると言う意図なのかもしれませんが、実際の発音とは異なっているので中国人にも伝わらないでしょう。ですから、ここでは、原則として音読みで音をふりますが、{{ruby|北京|ペキン}}、{{ruby|上海|シャンハイ}}のように現代中国語音に似せた言い方が一般的になったものもありますので、それらは、よく使う言い方をカタカナで表記します。</ref>を割譲する。
:#清は、日本へ賠償金2億両<ref>1両は銀37.3gで、当時の日本円に換算して約3億円。これは、政府の年間予算の約3倍にあたります。</ref>を支払う。
:#*日本は、この賠償金を資金として大規模な製鉄所を福岡県に作りました('''{{ruby|八幡|やはた}}製鉄所''')。
:清はそれまでも、イギリスやフランスと争って負けてはいましたが、欧米諸国は、それでも清国は世界最大の人口をかかえる巨大な国<ref>当時、3億人を超える程度の人口があったものとされています。</ref>であって、実力を発揮すれば欧米諸国であっても勝てるものではないと思われていた<ref>これを、「清国は『眠れる獅子』だ」という言い方をします。</ref>ので中国本土への進出はおさえられていましたが、近代化後間もない日本に敗れたため、欧米諸国は清国への進出を強め、中国大陸の多くの地域で欧米諸国の半植民地と言ってよい状態になりました。
<div style="margin:0 2em 0 4em">
{| class="wikitable" style="width:100%"
|'''【脱線 - 覚えなくてもいい話&考えてみましょう】日本は、どうして清国に勝てたのでしょう<small>
:戦争の勝敗の原因は、様々な要素があって、簡単に決めることができるものではありませんが、その時代の当事国の違いを比較することで、国の体制などの特徴を理解することができます。ここでは、なぜ、清国はやぶれ、日本は勝つことができたのかを考えてみましょう。
:戦争の勝敗を決める要素の第一は双方の国の規模です。大きな国の方が当然有利です。このころ、日本の人口はようやく4千万人程度のところ、清国の人口は3億人を超えていました。農業に適した広大な国土を有しており、近代化が遅れていたとは言え、税収などは日本よりもはるかに大きかったと考えられます。日清戦争の前も、世界最大級の軍艦をドイツから購入していたりします。相手の政権を倒すまでの全面戦争と言われる戦争であれば、日本は、勝つことは難しかったでしょう。
:一方で、清国は皇帝の軍隊は{{ruby|八旗|はっき}}・{{ruby|緑営|りょくえい}}と言われる17世紀の軍隊のままで、これは、日本の武士同様将兵が生まれながらの家柄で決まっている軍隊でしたが、[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#アヘン戦争|アヘン戦争]]以後の近代的戦争や民衆の反乱<ref>銃器などを欧米の商人から買っていました。</ref>では対応できなくなっていました。そこで、地方に派遣された高官は地元の有力者に呼びかけ、その地方の税を流用するなどして、地元の若者を集め、私的に軍隊を組織していました。一種の義勇兵ですが、実際は金を払って集めた{{ruby|傭兵|ようへい}}も少なくなかった言われています。
:また、清国は皇帝が独裁する事が建前であったため、外交と軍事がばらばらの動きをし、軍事も統一的な動きはできていませんでした。
:日本の場合、中央政府が全国民から国の制度として兵を集め、政府の予算で設備をそろえ、組織だった訓練を実施した軍隊を有していました。また、「天皇の軍隊」「日本国の軍隊」としての『国民』意識も高く、これが、士気につながりました。
:このような違いから、黄海およびその沿岸での戦闘という局地的な戦争では、国の規模の違いにかかわらず勝つことができたということです。
</small>
|}</div>
==== 日露戦争 ====
[[画像:Location-of-Liaodong-Peninsula.png|thumb|150px|left|遼東半島]]
[[ファイル:Kisaburō Ohara, Europe and Asia Octopus Map, 1904 Cornell CUL PJM 1145 01.jpg|thumb|300px|right|1904年当時、日本人がロシアにもったイメージを伝える風刺地図。]]
:下関条約で、日本は、台湾などとともに中国本土の遼東半島の割譲を受けましたが、ロシア、ドイツ、フランスが反対し('''{{ruby|三国干渉|さんごくかんしょう}}'''<ref>「干渉」とは、「他のものの動きに影響を与える」という元々の意味から、このような場合、「他国の政治に口を出す」という意味で使われています。</ref>)、遼東半島の割譲は取りやめとなりました。ところが、その遼東半島にはロシアが進出し、{{ruby|大連|だいれん}}、{{ruby|旅順|りょじゅん}}<ref name="中国地名"/>といった都市を建設し始めました。
:ロシアは、ユーラシア大陸を横断する鉄道('''シベリア鉄道''')を建築し、ヨーロッパとアジアの間の物流をおさえようとしていました<ref>日本からイギリスやフランスまで、船ならば45日〜50日かかったところを、シベリア鉄道を使えば15日程度で移動できました。</ref>。シベリア鉄道は、もともと、ロシア領内をウラジオストックまでのものですが、ロシアは遼東半島支配に伴って、大連まで{{ruby|東清|とうしん}}鉄道を建設し、その途中である{{ruby|満州|まんしゅう}}地域<ref>現在は、中国東北部と呼ばれる地域です。もともと、「満州(満洲)」とは清王朝をおこした民族(女真族)の名前で地名ではありませんが、「満洲族が起こった土地」と言うことで通称として用いられるようになりました。このころから、1945年頃まで、満州は日本にとって歴史上重要な土地となります。</ref>を実質的に植民地とするなど支配を強めます。そして、満州に接する朝鮮(日清戦争後、{{ruby|大韓帝国|だいかんていこく}})の政治にも介入するなどしはじめました<ref>ロシア進出の背景には、大韓帝国の王室のメンバーや{{ruby|両班|ヤンバン}}と呼ばれる高級官僚らが、朝鮮の政治・経済に段々影響を強めてくる日本を警戒して、それに対抗するため、ロシアと通じていたということもあります。</ref>。
:日本は、ロシアの動きに対して警戒しました。ロシアが満州地域でやっていることは、他のヨーロッパ諸国がアジアやアフリカでやっていて、日清戦争後に中国本土で進められている植民地化であって、そのままでは、満州地域だけでなく、朝鮮半島も、さらには日本までもが、植民地となってしまうのではないかと考えました<ref>これは、大げさな話ではなく、アフリカの植民地化はこの時期に進み、19世紀末には独立国は、エジプト周辺、エチオピア、リベリアだけになっていましたし、アジアも1887年にフランスがベトナムを植民地にするなどして、独立を保っていたのはシャム王国(現在のタイ王国)くらいになっていました。</ref>。
:日本政府では、伊藤博文に代表される日露の衝突を外交努力などで避けるべきとするグループがあった一方で、陸軍に対して大きな影響を持った'''[[小学校社会/6学年/歴史編/人物事典#山県有朋|{{ruby|山県|やまがた}}(山縣){{ruby|有朋|ありとも}}]]'''や首相の{{ruby|桂太郎|かつらたろう}}、外交官出身の外務大臣'''[[小学校社会/6学年/歴史編/人物事典#小村寿太郎|{{ruby|小村寿太郎|こむらじゅたろう}}]]<span id="小村寿太郎"/>'''らは、戦争は避けられないので、それに向けての準備をするという態度に出ました。日本国内では、戦争に向け軍艦を整備したり新たな兵器の開発を行う一方で、ロシアの中央アジアからインドへの南下などを警戒するイギリスと同盟を結び、ロシアとの戦争に備えました。
[[file:Nichirojp.png|thumb|300px|日露戦争の経過]]
:1904年(明治37年)日本とロシアは開戦し('''日露戦争''')、日本とロシアは、ロシアが植民地としていた遼東半島や満州で戦いました。ロシアは、モスクワなどから遠い極東に兵や兵器・軍馬・食料などを送るには、シベリア鉄道に頼るしかないので、すぐに戦場で攻撃の体制を作ることはできません。一方で、日本も、兵などを送るには日本海を渡らなければならないので、この地域の{{ruby|制海|せいかい}}権<ref>ある地域を自由に航行できるということ。</ref>を握る必要がありました。海軍はロシアの太平洋側の主力艦隊である旅順艦隊をせめ有利な立場になりますが、旅順艦隊は、援軍である世界最大級の艦隊バルチック艦隊<ref>「バルト海」で行動する艦隊なのでバルチック艦隊といいます。</ref>が到着するまで、旅順港に待機することになりました。日本陸軍は遼東半島南端から東進鉄道沿いに北上、朝鮮国境からの軍とあわせ、ロシア軍を満州地域北部までおしもどしました。また、旅順に引き込んだ艦隊がバルチック艦隊と合流すると制海権が危うくなるので、'''{{ruby|乃木希典|のぎまれすけ}}'''<ref>死後、乃木神社にまつられます。乃木坂などの地名にも残っています。</ref>が率いる陸軍の軍団が、要塞となった旅順を攻撃します。この旅順を囲む戦いは、日露戦争の中でも多くの日本兵の犠牲を出しましたが1905年(明治38年)1月に降伏し、バルチック艦隊のみを迎えうつことになりました。そうして、5月に'''[[小学校社会/6学年/歴史編/人物事典#東郷平八郎|{{ruby|東郷平八郎|とうごうへいはちろう}}]]'''がひきいる日本海軍は日本海海戦でバルチック艦隊をやぶり、日本海の制海権を安定したものにしました。
:日本は、戦争を有利に進めたとことで、アメリカ合衆国大統領'''セオドア・ルーズベルト'''に講和の仲介を依頼し、日本からは'''[[#小村寿太郎|小村寿太郎]]'''が、ロシアからは'''ウィッテ'''(前蔵相、のちに初代首相)が、米国のポーツマスに出向き、講和会議が開かれました。1905年9月5日、以下の事項を決めた条約('''ポーツマス条約''')が結ばれ、ロシアは中国から撤退し、日露戦争は日本の勝利で終わりました。
:# ロシアは日本の朝鮮半島における優越権を認める。
:# 日露両国の軍隊は、鉄道警備隊を除いて満州から撤退する。
:# ロシアは樺太の北緯50度以南の領土を永久に日本へ譲渡する。
:# ロシアは東清鉄道の内、旅順-長春間の南満洲支線と、付属地の炭鉱の{{ruby|租借|そしゃく}}<ref>土地などを、借り受けるという意味ですが、実質的な支配が行われ、「租借地」というのは、「植民地」とほぼ同義語になります。</ref>権を日本へ譲渡する。
:#*この路線は、「南満州鉄道」と改称され、日本の満洲進出の基礎となります。
:# ロシアは関東州(旅順・大連を含む遼東半島南端部)の租借権を日本へ譲渡する。
:# ロシアは沿海州沿岸の漁業権を日本人に与える。
:ポーツマス条約では下関条約と異なり賠償金の支払いはありませんでした。一部の日本国民はこれを不満に思って、暴動をおこすものもありました。しかし、国民には知らされていませんでしたが、戦争を有利に進めていたとはいえ、これ以上は財政上ほとんど無理な状態になっていて、すぐにでも戦争をやめなければならない状態になっていました。ロシアはそれを見越して、敗戦国でありながら、比較的有利な条件で講和条約を結んだといえます。
:しかし、この結果、満州や朝鮮半島に対するロシアの脅威は去りましたので、日本は、この地域への進出を高めます。特に、満州は石炭や鉄鉱石の地下資源が豊かな地域であったため鉱山開発を盛んに行いました。
:韓国については、政治的な不安定を理由に日本の属国化が進められ、1905年12月には統監府が設置され、伊藤博文が初代統監に就任しました。
:1909年 (明治42年)、伊藤博文はロシアとの外交交渉のため満州のハルビンに出向きましたが、そこで、朝鮮民族主義者に暗殺されます。それまで、韓国に対しては朝鮮民族に対し強硬的に望む人たちと、穏健に進めるべきという人たち(伊藤博文もその意見でした)が対立していたのですが、伊藤博文が暗殺されたことで、強硬派の勢いを増し、1910年(明治43年)8月に、日本は大韓帝国を併合しました('''{{ruby|韓国併合|かんこくへいごう}}''')。
:<span id="辛亥革命"/>日露戦争は、日本とロシアの戦争でしたが、その戦いは清国の領土でなされました。清国は、もはやそれを止める力を失っていました。中国の人々は、外国に国土を侵される不安が高まり、中国の人々が政治参加をする国をつくるため、1911年{{ruby|孫文|そんぶん}}が主導者となって革命を起こしました('''{{ruby|辛亥革命|しんがいかくめい}}''')。翌1912年清王朝は滅ぼされ、アジアにおいて史上初の独立した共和制国家である{{ruby|中華民国|ちゅうかみんこく}}が誕生しました。
<div style="margin:0 2em 0 4em">
{| class="wikitable" style="width:100%"
|'''【脱線 - 覚えなくてもいい話】<span id="南下政策"/>ロシアの南下政策<small>
:ロシアは、ヨーロッパの国の中では最も東にあって、17世紀にシベリアを征服し太平洋に達する領土を持つ大きな国ではあったのですが、ヨーロッパ中心部から離れていたので産業革命などはおくれてつたわりました。また、国土の多くが北にあったため、冬にほとんどの港が凍結するなどして、通商などにも支障が出るため、南へ勢力を伸ばす政策をとっていました。これを、「『{{ruby|不凍港|ふとうこう}}』を求めての南下」と言ったりします。19世紀、{{ruby|黒海|こっかい}}を勢力におさめようと、1853年トルコ(オスマン帝国)の領土であったバルカン半島などで戦争(クリミヤ戦争<ref>ロシアは、バルカン半島を南下しようとしたのですが、イギリス・フランスの参戦により押し戻され、クリミア半島が主要な戦場となりました。クリミヤ半島は、現在(2022年4月)、ロシアの侵攻で話題になっているウクライナの黒海地域です。</ref>)を起こしましたが、トルコをイギリスやフランスが支援し、この戦争ではロシアは敗北します<ref>クリミア戦争で、戦傷者の救護を組織的に行い、看護師による近代看護を確立したのが、フローレンス・'''ナイチンゲール'''です。</ref>。その後のバルカン半島の各民族の独立運動に合わせ、1877年オスマン帝国と戦争(露土戦争)をし、これに勝利しバルカン半島を経由したロシアの南下路が開けます。しかし、軍事的な勝利を収めたロシアの勢力拡大に対して欧州各国が警戒感が広がったため、ドイツ帝国の首相ビスマルクが主導し、1878年ベルリン会議を開き、ロシアの南下政策を止め、ロシアはバルカン半島方面の南下を一旦断念します。
:そこで、ロシアは、ヨーロッパ方面から世界へ出ることをあきらめ、東側のシベリアを経由して中央アジアや太平洋への進出をもくろみます。その結果のひとつが、三国干渉及びそれに続く遼東半島への進出です。
:しかし、日露戦争に敗れたため、ロシアは、ふたたび西へ目を向けます。そこで、バルカン半島から東に勢力を伸ばそうとしていたドイツとぶつかります。これが、第一次世界大戦の原因の一つとなります。
</small>
|}</div>
<div style="margin:0 2em 0 4em">
{| class="wikitable" style="width:100%"
|'''【脱線 - 覚えなくてもいい話&考えてみましょう】日本は、どうしてロシアに勝てたのでしょう<small>
:ここでは、なぜ、ロシアはやぶれ、日本は勝つことができたのかを考えてみましょう。
:双方の国の規模ですが、日本とロシアでは、人口で3倍、国家予算で10倍、常備軍で5倍という、大きな差がありました。また、清国と違い、ロシアの軍隊はロシア皇帝の下に組織された近代的な軍隊でした。実際、戦没者はロシアが81千人程度のところ、日本は88千人と日本の方が被害が大きかったりしています<ref>当時は、戦場の衛生環境などが悪く、病気になって亡くなる兵士も少なくありませんでした。日露とも、戦没者の1/4が病没者で。特に日本の病没の原因としては、ビタミンB欠乏症の「{{ruby|脚気|かっけ}}」が目立っていて、これは、日本陸軍の医療関係者が、当時新興の栄養学を軽視したためとも言われています。この医療関係者には、小説家の森鴎外もいました。</ref>。
:このように、日本に大きな被害が出た戦争であっても、ロシアが強気に出られなかったのは、サンクトペテルブルクやモスクワなどがある本拠地であるヨーロッパから、鉄道で10日以上かかる遠隔の地で兵隊を送ろうとしても、1日に数千人程度が限界だったからでしょう<ref>戦争において装備に大きな差がなければ、数の違いは大きく影響します。</ref>。ロシアにとっては、バルチック艦隊が日本海の制海権をにぎって、日本が大陸に兵隊や物資を送れなくすることで逆転をもくろんだのですが、日本海海戦でその希望もなくなり、ロシアは戦争の継続をあきらめたのだと思われます。
:バルチック艦隊は強力な艦隊でしたが、日英同盟により、インドなどイギリス植民地への寄港<ref>当時の軍艦の動力は蒸気機関であっったため、石炭と真水を大量に積み込む必要がありました。</ref>が拒否されたため、大西洋から、アフリカの南を回ってインド洋経由で7ヶ月もの航海ののちの到着でした。また、ロシアは身分制が残っており、士官は貴族階級など上流階級の出身者が多く、それに対して、水兵などは農民出身の者や都市の労働者などが多く、航海での待遇の差もあり、航海中から対立も生じていました。
:この上流階級と庶民階級の対立は、海軍だけでなく、陸軍でも見られました。なにより、ロシア国内の一般的な生活でも見られたのです。いくら国の規模が大きいとはいえ、戦争は国民生活に商品不足・インフレーションの影響を与えます。もともと、民衆からの不満がみられ、革命運動もあったところ、日露戦争によるインフレーションと数々の戦いで敗戦したとの知らせで民衆の間に暴動が頻発し、1905年には革命と言っていい状態になっていました。このような国内の不安定さから、ロシア政府は講和を急ぐようになり、日本の勝利につながったといえます。
</small>
|}</div>
=== 条約改正と国際社会での地位の向上 ===
[[File:Chikamatsu Kiken buto no ryakuke.jpg|thumb|300px|鹿鳴館における舞踏会を描いた浮世絵]]
;不平等条約改正の歩み
:幕末に欧米各国と結ばれた通商条約(不平等条約)の改正は日本政府の悲願でした。
:明治政府は、文明開化が進んで欧米並みの文明国になったことを示すため、さまざまなアピールをします。たとえば、1883年(明治16年)に外務卿{{ruby|井上馨|いのうえかおる}}は、'''{{ruby|鹿鳴館|ろくめいかん}}'''という、外国からの重要な来訪者や外交官を接待するための社交場を建設し、舞踏会を開いたりしていました。鹿鳴館での舞踏会などには、政府高官の夫人や娘なども参加しましたが、当時はドレスなどの洋装、欧米風の応対のマナーやエチケット、また、ダンスなどは全く一般的ではなく、必死の訓練などがあったと言われています。しかし、このような取り組みは、欧米人には「{{ruby|滑稽|こっけい}}」と感じられたと言う記録も残っており、あまりうまくいきませんでした。
:一方で、政府は、まず[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#治外法権|治外法権]](領事裁判権)の撤廃のため、国内の法整備を進め、公正な裁判が行われることを諸外国に示そうとしました。領事裁判権の裁判は犯罪に関するものなので、法律に関するフランス人の[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#お雇い外国人|お雇い外国人]]ボアソナードが指導してフランスの法律をもとにして、1880年(明治13年)に犯罪とその刑罰に関する刑法<span id="刑法"/>と刑事手続と裁判を定めた治罪法<ref>後に、刑事訴訟法に改正されます。</ref>が制定され、1882年(明治15年)施行されました。1889年(明治22年)には、[[#明治憲法|明治憲法]]が発布され法制度が欧米並みに整理されたことが、国際的に示されました。外務大臣'''[[#陸奥宗光|陸奥宗光]]'''は、各国と粘り強く交渉し、まず、1897年(明治30年)イギリスとの間で治外法権を撤廃する条約を結び、日清戦争終結後の1899年(明治32年)すべての国との間で治外法権を撤廃しました。
:そして、日露戦争の勝利は、世界に驚きをもってむかえられ、国際的地位も上がったことをうけて、外務大臣'''[[#小村寿太郎|小村寿太郎]]'''が主導し、1911年(明治44年)関税自主権も回復しました。
<div style="margin:0 2em 0 4em">
{| class="wikitable" style="width:100%"
|'''【脱線 - 覚えなくてもいい話】大津事件<small>
:1891年(明治24年)、日本を訪問中のロシア帝国皇太子ニコライ(後の皇帝ニコライ2世)が、滋賀県大津市で警備中の警察官に突然サーベルで切りつけられケガを負うと言う事件がありました。
:驚いた日本政府は、すぐに明治天皇自身が見舞いに駆けつけるよう手配し、日本を離れる際も自身で見送りました。大国ロシアの皇太子に対して小国日本の国民しかも警察官が暗殺{{ruby|未遂|みすい}}<ref>殺そうとした相手が死ななかったことを言います。</ref>をおかしたということで、ロシアが攻めてくるかもしれない、そして、当時の日本ではロシアに勝てるはずがないということで、日本国内は、大騒ぎになりました。
:明治政府は、犯人を死刑に処してロシア政府に対して謝罪の意も示そうとしました。
:ところが、当時の[[#刑法|刑法]]では、殺人未遂の最高刑は無期{{ruby|徒刑|とけい}}<ref>現在の言い方では「無期{{ruby|懲役|ちょうえき}}」、一生、刑務所に入れられる刑です。</ref>で、死刑とすることはできません。そこで、政府は、天皇や皇室に暴行などを加え死傷させた場合に適用される{{ruby|大逆|たいぎゃく}}罪を適用するよう裁判所に要請しました。しかし、これは「法律に定められていること以外を罪としてはならない」という近代法の原則「{{ruby|罪刑|ざいけい}}{{ruby|法定|ほうてい}}主義」に反します。大審院院長<ref>現在の最高裁判所長官に相当します。</ref>{{ruby|児島惟謙|こじまいけん}}は、事件の裁判所に、法律に従って判決を下すよう指示し、その結果、死刑ではなく無期徒刑の判決となりました。
:このことは、ロシアとの外交関係を難しくさせるおそれがありましたが、欧米諸国に対しては、「日本は、法律を厳格に守る国である」ということが印象付けられ、条約改正に向けても信用を得ることができました。
</small>
|}</div>
;<span id="国際社会"/>国際社会での地位の向上
: 1912年(明治45年・大正元年)大正天皇が即位し、元号が「'''大正'''」となりました。
: 1914年(大正3年)にヨーロッパの国々を二分した'''[[小学校社会/6学年/歴史編/戦争への道と現代の民主国家日本の誕生-昭和から現在まで#全世界を巻き込む戦争 - 第一次世界大戦|第一次世界大戦]]'''が始まりました<ref>第一次世界大戦については[[小学校社会/6学年/歴史編/戦争への道と現代の民主国家日本の誕生-昭和から現在まで|次の章]]で詳しく説明します。</ref>。日本は、イギリスやフランスの属する協商国に参加し、敵対する同盟国の一つであるドイツが租借する中国の{{ruby|青島|チンタオ}}<ref name="中国地名"/>や南太平洋の島々を占領しました。1919年戦争は協商国の勝利に終わり、翌年、平和を維持するための'''国際連盟'''が設立、日本は英仏などとともに常任理事国の一つとなりました。
: 第一次世界大戦は、今までに見られなかったほどの大規模な戦争で、戦場が全国土に広がり多くの工場設備なども失われ、工業生産が止まってしまったりしました。しかし、主な戦場はヨーロッパで、日本への被害はほとんどなかったため、日本は、ヨーロッパの工業生産に代わって、綿糸や綿布といった繊維製品や化学肥料など、さまざまな工業製品を輸出しました。また、日本へのヨーロッパからの輸入が止まったため、それにかわる重工業などが起こるきっかけにもなり、国際取引においても機械など高度な工業製品を輸出できる国となりました。第一次世界大戦の影響で日本の経済は急速に成長しました。
;明治後期から大正にかけての人々の生活や文化と学問
:明治維新後、さまざまな[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#殖産興業|殖産興業]]の取り組みによって、経済的余裕ができ、国民生活は向上し、さまざまな近代文化の進展が見られました。また、欧米から伝わった工業的な製紙法と活版印刷は安価で大量の印刷を可能として、新聞や雑誌が広く普及します。これら新聞や出版業の発達したことと、[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#学校|学校制度]]が定着し教育水準が上がったことで、国民の政治参加の意識も高まりました。
:さらに、日清戦争・日露戦争といった戦争で、納税額が多いかどうか、つまり財産が多いかどうかにかかわらず、国民として平等に生命を犠牲にするということが意識され、納税額による選挙権の制限([[#制限選挙|制限選挙]])をやめて、成人であれば誰にでも選挙権が与えられる「普通選挙」を求めた社会運動('''普選運動''')がおこり、1925年(大正14年)すべての男性が選挙権を有する普通選挙法が成立しました。このような、民主化の動きを「'''大正デモクラシー'''」と言います。しかし、まだ女性には選挙権は認められていませんでした。
:[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#文明開化|文明開化]]を受けて、日本には西洋風の文化が広く普及し、明治20年(1887年)代以降になると、それを受けた独自の文化が育ってきました。
:新聞や出版業の発達は上で述べたとおり人々の政治への意識を高めたところですが、そこには、政治的な考えなどだけではなく、人々の娯楽としての小説なども掲載されるようになりました。明治も初めのうちは、歌舞伎の演目などを題材としたものが多かったのですが、1885年(明治18年)、{{ruby|坪内逍遥|つぼうちしょうよう}}は、『{{ruby|小説神髄|しょうせつしんずい}}』をあらわし、人々の普段の生活に近い題材をとりあげる、いわゆる近代文学を提唱しました。またその中で、話し言葉と書き言葉の間の大きな違いから、もっと平易で話し言葉に近い言葉を使うよう進められました。これを{{ruby|言文一致|げんぶんいっち}}運動といいます<ref>ただし、今でも話し言葉と書き言葉は同じものではありません。</ref>。このような動きのなかで、多くの近代文学というものが生まれました。その中には、1895年(明治28年)に『たけくらべ』を書いた{{ruby|樋口一葉|ひぐちいちよう}}のような女性もいました。その後、{{ruby|森鴎外|もりおうがい}}や{{ruby|夏目漱石|なつめそうせき}}があらわれ、近代文学が確立します。特に、夏目漱石が1905年(明治38年)に初めて書いた小説『{{ruby|吾輩|わがはい}}は猫である』はユーモアに富んだ内容と落語にヒントを得たとされる平易な語り口調で広く普及し、日本語の書き言葉の元になったとも言われています。
:美術の分野では、写実的な西洋絵画や彫刻が日本でも制作されるようになりました。政府は1887年(明治20年)、「東京美術学校<ref name="芸大">「東京美術学校」と「東京音楽学校」は、のちに合併し「東京{{ruby|藝術|げいじゅつ}}大学」となります。</ref>」を設立し、西洋絵画の製作者や指導者を育てました。
:また、音楽の分野でも西洋音楽の受け入れが進み、1890年(明治23年)、演奏家・作曲家や指導者を育てる「東京音楽学校<ref name="芸大"/>」が開校しました。
:学問の分野では、[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#学校|大学教育]]が定着し、日本の科学技術の水準も世界的なものになってきました。物理学では原子のモデルを提唱した{{ruby|長岡半太郎|ながおかはんたろう}}、数学の分野では{{ruby|高木貞治|たかぎていじ}}といった世界的に評価される研究者も登場するようになりました。
:特に、人々の生活に密着した医学の分野では、世界的に進みつつあった細菌学の分野で多くの成果が見られ、破傷風の治療法の研究やペスト菌の発見をおこなった'''[[小学校社会/6学年/歴史編/人物事典#北里柴三郎|{{ruby|北里柴三郎|きたざとしばさぶろう}}]]'''、{{ruby|赤痢|せきり}}菌を発見した{{ruby|志賀潔|しがきよし}}、黄熱病や梅毒の研究で知られ、ノーベル生理学・医学賞の授賞候補ともなった'''[[小学校社会/6学年/歴史編/人物事典#野口英世|{{ruby|野口英世|のぐちひでよ}}]]'''のように国際的な研究者がでてくるようになりました。
<div style="margin:0 2em 0 4em">
{| class="wikitable" style="width:100%"
|[[ファイル:Noguchi Hideyo.jpg|thumb|120px|right]]
'''【脱線 - 覚えなくてもいい話】<span id="野口英世"/>野口英世<small>
:本文に書いたとおり、野口英世は、国際的に活躍した細菌学者で、現在、その肖像が1000円札に使われている人です。子供の頃から大変苦労して勉強して、多くの業績を残した人で、皆さんの中で、野口英世の伝記を読んだことのある人も少なくないでしょう。ここでは、野口英世の生涯について簡単に紹介して、なぜ彼が偉人とされているかをお話ししたいと思います。
:1876年(明治9年)、英世<ref>元の名は「清作」で「英世」は22歳になって改名したものですが、ここでは、「英世」で統一します。</ref>は福島県耶麻郡三ッ和村(現:耶麻郡猪苗代町)に生まれます。貧しいというほどではありませんが、決して余裕のある家の生まれではありませんでした。英世は1歳の時に{{ruby|囲炉裏|いろり}}に落ち、左手に大{{ruby|火傷|やけど}}を負います。ただれた皮膚で指がくっついて開かなくなるというひどいものでした。英世は、学校に上がるようになると、このことでいじめられました。しかし、英世の学校の成績はとても素晴らしいものでした。英世の家計では、上級の学校に出すのは難しく、普通は小学校を出て働きに出るとことだったのですが、これを惜しんだ教師や地域の人がお金を出し合って、上の学校へ進ませました。また、火傷あとが不便であろうと、やはりお金を出し合って、まだ珍しかった西洋医術による手術を受けさせ、左手を使えるようにしました。英世はこの手術の成功に感激したことがきっかけで医師を目指すこととなりました。
:1896年(明治29年)英世は上京し、医学を学びます。1900年(明治33年)米国に渡り、研究を始めます。そして、アメリカを拠点として基礎医学の分野で数々の業績をあげ世界的な名声を得て、何回かノーベル生理学・医学賞の候補者ともなりました。
:1918年(大正7年)以降は{{ruby|黄熱|おうねつ}}病の研究に打ち込み、黄熱病の流行地域である南アメリカ各国やアフリカに渡って研究を続けます。しかし、黄熱病の研究中に自身もその病にかかり、1928年(昭和3年)アフリカのイギリス植民地ゴールド・コースト(現:ガーナ共和国) アクラで亡くなります。
:野口英世が偉人とされるのは、
:*庶民の出身であるにもかかわらず、高い能力で医者・研究者の地位についた<ref>大学以上の高等教育を受けさせることは当時の庶民にはめったにないことでした。また、英世の出身地会津は、戊辰戦争で官軍に抵抗し、政府などに関係者も少なく、薩長などの出身者より不利なところもありました。</ref>。
:*体に受けたハンディキャップにも負けず、努力して勉強した<ref>当時、家が貧しくても、軍隊に入って勉強するという方法もありましたが、英世の場合、このやり方は難しかったと考えられます。</ref>。
:*能力を世に出そうと、周囲の人が協力した。
:*日本ではなく、国外の研究所を拠点として国際的な活躍をした。
:というところにあると思います。野口英世の業績自体は、その後の医学の発展によって否定されたものも少なくはありませんが、目標に向けて努力する姿には見習うものがあると思います。
</small>
|}</div>
:日本の経済力が大きくなることにともなって、人々の暮らしもだんだん豊かなものになっていきましたが、この時期に、大きな災害に見舞われてもいます。
:まず、<span id="スペインかぜ"/>1918年(大正7年)から1920年(大正9年)にかけて世界中で流行した'''スペインかぜ'''といわれるインフルエンザの大流行です。当時は第一次世界大戦の交戦中であったため、軍人を中心に広く行き来し世界中で流行しました。全世界で30%にあたる5億人が感染し、少なくとも1700万人の死者がでたものと推定されています。日本においてもこの3年間で約40万人程度の死者が出ました<ref>最近のコロナ禍で、2020年から2022年7月現在の死者の累計数が約3万人であることと比較してみてください。</ref>。
:もう一つは、<span id="関東大震災"/>1923年(大正12年)9月1日、南関東一円を襲った'''関東大震災'''です。マグニチュード7.9〜8.3と推定される大地震<ref>1000年に1度と言われる2011年東日本大震災のマグニチュードは9.0で特別ですが、1995年阪神淡路大地震のマグニチュードは7.3くらいです。</ref>で、約1万人が倒れた建物の下敷きになって亡くなり、約9万人が、地震ののちに発生した火災で亡くなりました。
== 脚注 ==
以下は学習の参考ですので覚える必要はありません。<small>
<references/></small>
----
{{前後
|type=章
|[[小学校社会/6学年/歴史編]]
|[[小学校社会/6学年/歴史編/歴史の流れをつかもう|日本の歴史の流れ]]
|[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代|明治維新と近代国家日本の成立-幕末・明治時代]]
|[[小学校社会/6学年/歴史編/戦争への道と現代の民主国家日本の誕生-昭和から現在まで|戦争への道と現代の民主国家日本の誕生-昭和から現在まで]]
}}
[[Category:社会|しようかつこうしやかい6]]
[[Category:小学校社会|6ねん]]
[[Category:小学校社会 歴史|#12]]
00g3d5qe7vq4ypx47zdm2fij59xp027
205688
205682
2022-07-22T17:03:11Z
Tomzo
248
wikitext
text/x-wiki
{{Nav}}
{{Pathnav|メインページ|小学校・中学校・高等学校の学習|小学校の学習|小学校社会|6学年|歴史編|frame=1}}
{| class="wikitable" style="width:100%"
|+ この章の概要
|<!--1889年前後から「国際的地位が向上」(1920年国際連盟成立 常任理事国入り)まで--><!--(コ) 大日本帝国憲法の発布,日清・日露の戦争,条約改正,科学の発展などを手掛かりに,我が国の国力が充実し国際的地位が向上したことを理解すること。-->
★時代区分:明治時代後期、大正時代</br>
★取り扱う年代:1889年(大日本帝国憲法の発布)から1925年(昭和改元)まで
; 大日本帝国憲法の制定
: 明治維新の改革は、五箇条の御誓文の方針によりなされましたが、改革が進み近代文明国としての形がひととおり整ってきたところ、さらに政治の形を確かなものとし、人々の権利を明らかにするため、'''憲法'''の制定と選挙によって選ばれた議員による議会を開くことが求められました。'''板垣退助'''や'''大隈重信'''は国会の開設を求めて、政党をつくりました。'''伊藤博文'''を中心とした明治政府は欧米諸国の憲法を研究し、1885年に'''内閣制度'''が創設され、1889年に'''大日本帝国憲法'''が発布されました。翌年憲法の精神に基づいて、初めて総選挙が行われ'''帝国議会'''(国会)が召集されました。
; 日清戦争と日露戦争
: 急激な近代化に成功した日本は、国内で拡大した産業の新たな市場を求め大陸に進出しようとします。朝鮮は中国の帝国'''{{ruby|清|しん}}'''の属国でしたが、その影響で近代化が進んでおらず、朝鮮国内の近代化を求める人々は日本と協力して清の影響から逃れようとしました。朝鮮国内の清に従う保守派と改革派の争いに日本と清はそれぞれ兵を出すなどして緊張が高まり、1894年朝鮮半島西岸における両国海軍の接触をきっかけに'''日清戦争'''が始まりました。日本は清の北洋海軍を壊滅させ、遼東半島を占領するなど戦いを有利に進め、翌年、'''陸奥宗光'''外務大臣と清の提督である李鴻章が交渉し、清の日本への賠償や台湾・遼東半島の割譲などを定めた下関条約が締結され講和が結ばれました(日本の勝利)。
: 遼東半島はロシア、ドイツ、フランスが反対したので割譲は取りやめとなりましたが(三国干渉)、そこにロシアが進出し、それを警戒する日本と対立しました。1904年日本とロシアは開戦し('''日露戦争''')、日本とロシアは、ロシアが植民地としていた遼東半島や中国東北部(満州)で戦いました。日本は多くの犠牲者を出しましたが、'''東郷平八郎'''がロシアのバルチク艦隊をやぶるなどして有利な位置となり、翌年、'''小村寿太郎'''外務大臣とロシアのウィッテが交渉し、ロシアの中国からの撤退、南満州鉄道の譲渡、南樺太の割譲などを定めたポーツマス条約が締結され講和が結ばれました(日本の勝利)。
; 条約改正と国際社会での地位の向上
: 幕末に欧米各国と結ばれた通商条約(不平等条約)の改正は日本政府の悲願でした。まず、政府は、国内の法整備を進め、公正な裁判が行われることを示し、日清戦争終結後の1899年治外法権を撤廃しました。そして、日露戦争の勝利は、世界に驚きをもってむかえられ、国際的地位も上がったことをうけて、1911年関税自主権も回復しました。
: 1912年大正天皇が即位し、元号が「'''大正'''」となりました。
: 1914年にヨーロッパの国々を二分した'''第一次世界大戦'''が始まりました。日本は、イギリスやフランスの属する連合国に参加し、敵対する同盟国の一つであるドイツが租借する中国の{{ruby|青島|チンタオ}}や南太平洋の島々を占領しました。1919年戦争は連合国の勝利に終わり、翌年、平和を維持するための'''国際連盟'''が設立、日本は英仏などとともに常任理事国の一つとなりました。
: このころになると、日本の科学技術の水準も世界的なものになり、'''野口英世'''のように国際的な研究者がでてくるようになりました。
|}
=== 世界の変化2 - 市民革命 ===
:日本が鎖国をしている間、ヨーロッパやそれを受けたアメリカ大陸では、[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#世界の変化1 - 産業革命|産業革命]]ともうひとつの大きな社会変革が起こっていました。
;市民革命以前のヨーロッパ
:ヨーロッパの国々も長い間、生まれながら身分によって職業などが決められ、多くの人々は農民や職人として土地(荘園)の領主(「{{ruby|封建|ほうけん}}領主」といいます)や都市の貴族などに服従する社会でした。また、この時代は、ローマ教皇を頂点とする'''カトリック教会'''が、強い影響力や荘園を持っていたというのは、[[小学校社会/6学年/歴史編/戦乱の世の中と日本の統一-戦国時代・安土桃山時代#キリスト教|前にお話ししたとおり]]です。この時代を{{ruby|封建|ほうけん}}制<ref>土地(領地)を間に介して、主従関係を結ぶ制度を言います。日本でも、[[小学校社会/6学年/歴史編/武家社会の始まり-鎌倉時代#封建制|鎌倉時代の「'''ご恩と奉公'''」の関係]]はこれにあたりますし、安土桃山時代から江戸時代にかけての[[小学校社会/6学年/歴史編/戦乱の世の中と日本の統一-戦国時代・安土桃山時代#石高制|石高制]]も封建制の一種です。</ref>の時代と言います。
:14世紀くらいになると、都市を中心に商業が発展してきて、豊かな財産を持って、荘園領主よりも強い影響力を持つようになる者もでてきました。15世紀「[[小学校社会/6学年/歴史編/戦乱の世の中と日本の統一-戦国時代・安土桃山時代#大航海時代|大航海時代]]」になると、さらに、貿易や植民地からの収益で都市の商人などは勢力を強くしました。また、繊維工業などを中心に、人を集めて工場などを経営する人たちもあらわれました。これらの、封建領主や貴族ではない階層の人たちを、「{{ruby|市民|しみん}}階級」といいます。これらの、市民階級の経済力を背景に、ヨーロッパの各地で強い力を持った国王が誕生し、伝統的な荘園領主などを圧倒しました。これを、{{ruby|絶対王政|ぜったいおうせい}}の時代といいます。絶対王政の王国は、政治を行う政府は専門の役人をおき、戦争に備えて軍隊を平時から常設するようになりました<ref>封建制の時代は、国王でも自分の荘園をおさめられる程度の役人がいればよく、戦争などでは、その都度、封建領主に命令して軍隊(騎士)を集めていました。</ref>。
;市民革命と近代国家
:市民階級が台頭してくると、封建制度以来の身分制度に対して、生まれながらの身分にかかわらず人間は'''平等'''であり、'''自由'''に発言や経済活動をする'''権利'''('''人権''')を持っているという考え方が広がってきました。また、封建制の時代はおさめている荘園の収穫から政治を行っていましたが、絶対王政の政府は、市民階級からの税金で成り立っていたのですが、税金を取られる市民たちは国王の都合だけで徴税されることに不満を持ち始めました。こうして、17世紀以降、市民階級は絶対王政と対立するようになります。市民階級は代表を出して、政治に参加するようになります。'''議会'''('''国会''')の始まりです。さらには、国王の圧政に対しては、市民階級が集まって武力をもって王政を倒したりしました。これを「'''{{ruby|市民革命|しみんかくめい}}'''」と言います。
:市民革命は、17世紀のイギリスに始まりました ('''清教徒革命'''など)。ひきつづいて、北アメリカ大陸のイギリス植民地が、独立を求めて戦争を起こしアメリカ合衆国が成立しました ('''アメリカ独立戦争''')。そして、1789年代表的市民革命である'''フランス革命'''が起こります。市民革命は、フランスの'''ナポレオン'''が、フランスの革命政府を打ち倒そうとする周辺の国々を逆にせめた戦争によってヨーロッパ各地に広がります。
:市民革命自体は、各国の状況によって様々な結果を生みました。革命後に王政が復活した国もあります。しかし、市民革命で国の政治に身分によらない一般の市民が参加できるようになって、広く国全体から資金を集める仕組みができたこと、また、兵隊に国民が動員されるようになったこと('''[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#徴兵制|徴兵制]]''')から、数が多く強力な軍隊を持つようになり、それまでの、封建的な国や絶対王政の国を圧倒するようになりました。これらの古い体制の国々も、市民階級を国の政治に参加させるように、国の仕組みを変えるようになりました。まず、国民の権利を保障し、国民の代表が参加する'''議会'''を設置して国の政治に参加できるようにしました。そして、そのことを'''憲法'''という、強い力を持った法律に定めるようになりました。
:国が、国王などの所有物ではなく、そこに住む国民によって成立するという近代国家('''国民国家''')の誕生です。
=== 大日本帝国憲法の制定 ===
[[File:Taisuke ITAGAKI.jpg|thumb|125px|板垣退助]]
[[File:OKUMA_Shigenobu.jpg|thumb|125px|大隈重信]]
[[file:Itō Hirobumi.jpg|thumb|125px|伊藤博文]]
:明治になって、[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#四民平等|身分制度がなくなり]]<ref name="華族">実際は、公家や大名、明治政府に大きな貢献のあった人たちについては、{{ruby|公爵|こうしゃく}}・{{ruby|侯|こう}}爵・{{ruby|伯|はく}}爵・{{ruby|子|し}}爵・{{ruby|男|だん}}爵といった貴族の爵位が与えられ、その一族は「{{ruby|華族|かぞく}}」と呼ばれました。華族には、いくつかの特権が認められましたが、華族の数は比較的少ないうえ、江戸時代ほど極端に大きな差ではありませんでしたし、社会的な貢献をすることで、誰でも華族となる機会はありました。また、「士族」と「平民」の間で異なる取り扱いは一切ありませんでした。</ref>、人々は才覚や努力によって、どのような職業に就くこともできるようになりました。人々は、学業をはじめとしたさまざまな努力をして、いろいろな分野で活躍するようになりました。
:明治政府は、さまざまな改革を強引に進めたため民衆と対立することも少なくありませんでした。このような民衆の不満は、[[#士族の反乱|士族の反乱]]の後は、こうした近代思想を取り入れて政治参加を求める{{ruby|自由民権|じゆうみんけん}}運動につながります。自由民権運動は、憲法の制定と、民衆が政治に参加できる選挙を通じた国会の開設をもとめるようになります。自由民権運動は、征韓論で下野した'''[[小学校社会/6学年/歴史編/人物事典#板垣退助|{{ruby|板垣退助|いたがきたいすけ}}]]'''と1881年(明治14年)に'''[[小学校社会/6学年/歴史編/人物事典#伊藤博文|{{ruby|伊藤博文|いとうひろぶみ}}]]'''らと対立して政府を離れた'''[[小学校社会/6学年/歴史編/人物事典#大隈重信|{{ruby|大隈重信|おおくましげのぶ}}]]'''らに主導されました。
:大隈や板垣が主導する自由民権運動の主張は、国民の自由と権利を保障する憲法の制定とそれに基づく国民の選挙による議会(民選議会)の開設及び議会による政府の統制でした。伊藤博文ら明治政府を主導する人たちは、自由民権運動の考えをそのまま受け入れると、政策を政府が思うとおりに進めることができず、富国強兵などの改革政策に差しさわりがあると考え、この運動を弾圧しました。一方で各地の有力者や、新たな産業の成功者が登場してきており、明治政府はこれらの人々の支持を受けたいと思っていました。また、欧米諸国から見ると、民選議会が政治を進めない国は遅れているとの意識があり、不平等条約改正にあたっても説得させることができない理由の一つとなっていました。
:1881年(明治14年)明治政府は、明治天皇名で「国会開設の勅諭」を下し、1889年(明治22年)に国会を開設することを国民に約束しました。これを受けて、自由民権運動の活動家は政党を結成し、同年には自由党が板垣退助を中心として、翌1882年(明治15年)立憲改進党が大隈重信らによって結成されました。
:一方、伊藤は、1882年(明治15年)、憲法制定・国会開設の模範を研究するためためにヨーロッパを視察しました。そこで、伊藤は議会が発達したイギリスや、人権思想が進んでいたフランスではなく、ドイツ帝国の憲法を模範にすることとしました<ref>この頃のドイツは、日本が藩に分かれていたのと同様に、多くの王国・貴族領に分かれていたものを、各地で統一の要望が上がり、その中で有力となったプロイセン国王を皇帝とするドイツ帝国が成立していました。ドイツ帝国は、イギリスやフランスよりも、皇帝(それを受けた行政機関)の権限が強く、議会の力はおさえられていました。ドイツは、英仏に比べ工業化などが遅れていたために、それを推進するために、強い行政の力が必要であったためです。また、各個人の人権についても制限がありました。伊藤が、英仏ではなく、ドイツを国の形の模範としたのは、このように、日本と状況が似ていたためです。</ref>。帰国した伊藤は憲法制定の準備をはじめ、1885年(明治18年)に内閣総理大臣を長とする'''内閣制度'''が創設され、1889年(明治22年)に'''大日本帝国憲法'''(明治憲法<span id="明治憲法"/>)が発布されました。翌1890年(明治23年)7月1日憲法の精神に基づいて<ref>明治憲法が、実際に有効となる(施行される)のは、1890年(明治23年)11月29日なので、まだ、憲法の下の選挙・国会の招集ではありませんでした。</ref>、初めて総選挙が行われ、11月25日'''帝国議会'''(国会)が召集されました。
:明治憲法は以下のことを定めています。
:#天皇は、日本の統治者とされます。
:#国会は、天皇に「協賛」して法律や予算を定める機関とされます。
:#*法律や予算を決めるのは天皇であって、国会は、その補助をしているに過ぎないという考えを表しています。
:#*緊急と認められる時には、天皇<ref>実際は、行政府である政府の仕事です。</ref>は国会の議決によらず、法律に代わる勅令を出すことができました。
:#国会は、貴族院と衆議院により成り立ち、衆議院は選挙によって選ばれた議員により構成され、貴族院は皇族・華族<ref name="華族"/>及び勅命<ref>天皇の命令。実際は、その時の行政府による指名。</ref>で任名された議員により構成されます<ref>ただし、このような議会の成り立ちは、世界的に見ても珍しいものではありませんでした。明治憲法の元になったドイツ帝国の議会が貴族院と衆議院で成り立っていましたし、そもそも、議会政治の模範とされるイギリスも世襲貴族による「貴族院」と選挙で選ばれた議員による「庶民院」で構成されていて、現在もその伝統が残ります。このことで、身分で選ばれた議員による議会を「上院」、選挙で選ばれた議員による議会を「下院」という習慣ができました。アメリカ合衆国には独立当時から貴族制度はありませんでしたが、上院は各州の代表(元々は州議会が選出していましたが、現在は州民の選挙によります)、下院は州にかかわらず選挙で選ばれた議員による議会と、上院と下院で性質を変えていたりします。時代が下るにつれ、選挙で選ばれた議員の決めることが優先されるという政治習慣(下院優先の原則)が有力になります。</ref>。
:#*衆議院の優位などの定めはなく、各議院で議決されなければ法律などは成立しませんでした。
:#*<span id="制限選挙"/>衆議院議員の選挙権は、憲法を定めた当時は、一定以上の税金を納めた者にのみ認められていました。
:#国務大臣は天皇を{{ruby|輔弼|ほひつ}}(助言し助ける)すると定められます。また、内閣総理大臣についての定めはありません。
:#*内閣総理大臣は、天皇が指名する建前でしたが、実際には、元老といわれる人達<ref>元老には、最初は伊藤博文など維新の功臣が、後代には長期に首相を務めた者がなりました。</ref>が協議したり、後には首相経験者などで構成する重臣会議で決議して天皇に{{ruby|推薦|すいせん}}して決まるものでした。
:#軍隊(陸海軍)は天皇が直接まとめひきいるとされました。また、国民には徴兵に応じる義務がありました。
:#*軍隊は、国会や内閣の命令を聞く必要がないと解釈されるようになります。
:#様々な国民の人権が認められましたが、それは、法律の範囲内で認められるものとされました。
:#*例えば、女性には選挙権は認められることはありませんでした。また、民法で家族や相続は家制度によったため、女性は不利な取り扱いを受けました。
:#*後に制定される治安維持法は、政治思想(特に社会主義思想・共産主義思想)を取り締まる法律でした。
=== 日清戦争と日露戦争 ===
==== 日清戦争 ====
[[File:《马关条约》签字时的情景.jpg|thumb|right|200px|none|下関条約の調印の様子。 向かって左に着席するのが日本の伊藤全権、右が清国の李全権]]
: 急激な近代化に成功した日本は、国内で拡大した産業の新たな市場を求め大陸に進出しようとします<ref>「急激な近代化に成功した日本」と書きましたが、これは、[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#世界の変化1 - 産業革命|前の章の『産業革命』の節]]に書いた「欧米各国は、産業革命で経済力が大きくなりましたが、さらにそれを大きくするため、国内で生産する工業製品の{{ruby|市場|しじょう}}と原材料となる農産物や鉱物資源を欧米諸国の外に求めるようになりました。」の部分を日本に当てはめたものです。しかし、この頃の日本の工業力はまだ近代化が始まったばかりで、外国に市場を求めるまで成長していません。</ref>。朝鮮は中国の帝国'''{{ruby|清|しん}}'''の属国でしたが、その影響で近代化が進んでおらず、朝鮮国内の近代化を求める人々は日本と協力して清の影響から逃れようとしました。朝鮮国内の清に従う保守派と改革派の争いに日本と清はそれぞれ兵を出すなどして緊張が高まり、1894年(明治27年)朝鮮半島西岸における両国海軍の接触をきっかけに'''日清戦争'''が始まりました。日本は清の北洋海軍を壊滅させ、黄海沿岸の軍事拠点を攻撃し、遼東半島を占領するなど戦いを有利に進め、翌1895年(明治28年)、'''[[小学校社会/6学年/歴史編/人物事典#陸奥宗光|{{ruby|陸奥宗光|むつむねみつ}}]]<span id="陸奥宗光"/>'''外務大臣と清の提督である{{ruby|李鴻章|りこうしょう}}が交渉し、以下の事項などを定めた'''下関条約'''が締結され講和が結ばれました(日本の勝利)。
:#清は、朝鮮の独立を認める。
:#清は、日本へ台湾と{{ruby|遼東|<small>りょうとう/リャオトン</small>}}半島<ref name="中国地名">中国の地名については、日本語の音読みで読む方法と現代の中国語に近い音で読む方法があります。後者は、「音読みだと日本人にしか通じない」と言う配慮から現代の中国語に近い音を当てると言う意図なのかもしれませんが、実際の発音とは異なっているので中国人にも伝わらないでしょう。ですから、ここでは、原則として音読みで音をふりますが、{{ruby|北京|ペキン}}、{{ruby|上海|シャンハイ}}のように現代中国語音に似せた言い方が一般的になったものもありますので、それらは、よく使う言い方をカタカナで表記します。</ref>を割譲する。
:#清は、日本へ賠償金2億両<ref>1両は銀37.3gで、当時の日本円に換算して約3億円。これは、政府の年間予算の約3倍にあたります。</ref>を支払う。
:#*日本は、この賠償金を資金として大規模な製鉄所を福岡県に作りました('''{{ruby|八幡|やはた}}製鉄所''')。
:清はそれまでも、イギリスやフランスと争って負けてはいましたが、欧米諸国は、それでも清国は世界最大の人口をかかえる巨大な国<ref>当時、3億人を超える程度の人口があったものとされています。</ref>であって、実力を発揮すれば欧米諸国であっても勝てるものではないと思われていた<ref>これを、「清国は『眠れる獅子』だ」という言い方をします。</ref>ので中国本土への進出はおさえられていましたが、近代化後間もない日本に敗れたため、欧米諸国は清国への進出を強め、中国大陸の多くの地域で欧米諸国の半植民地と言ってよい状態になりました。
<div style="margin:0 2em 0 4em">
{| class="wikitable" style="width:100%"
|'''【脱線 - 覚えなくてもいい話&考えてみましょう】日本は、どうして清国に勝てたのでしょう<small>
:戦争の勝敗の原因は、様々な要素があって、簡単に決めることができるものではありませんが、その時代の当事国の違いを比較することで、国の体制などの特徴を理解することができます。ここでは、なぜ、清国はやぶれ、日本は勝つことができたのかを考えてみましょう。
:戦争の勝敗を決める要素の第一は双方の国の規模です。大きな国の方が当然有利です。このころ、日本の人口はようやく4千万人程度のところ、清国の人口は3億人を超えていました。農業に適した広大な国土を有しており、近代化が遅れていたとは言え、税収などは日本よりもはるかに大きかったと考えられます。日清戦争の前も、世界最大級の軍艦をドイツから購入していたりします。相手の政権を倒すまでの全面戦争と言われる戦争であれば、日本は、勝つことは難しかったでしょう。
:一方で、清国は皇帝の軍隊は{{ruby|八旗|はっき}}・{{ruby|緑営|りょくえい}}と言われる17世紀の軍隊のままで、これは、日本の武士同様将兵が生まれながらの家柄で決まっている軍隊でしたが、[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#アヘン戦争|アヘン戦争]]以後の近代的戦争や民衆の反乱<ref>銃器などを欧米の商人から買っていました。</ref>では対応できなくなっていました。そこで、地方に派遣された高官は地元の有力者に呼びかけ、その地方の税を流用するなどして、地元の若者を集め、私的に軍隊を組織していました。一種の義勇兵ですが、実際は金を払って集めた{{ruby|傭兵|ようへい}}も少なくなかった言われています。
:また、清国は皇帝が独裁する事が建前であったため、外交と軍事がばらばらの動きをし、軍事も統一的な動きはできていませんでした。
:日本の場合、中央政府が全国民から国の制度として兵を集め、政府の予算で設備をそろえ、組織だった訓練を実施した軍隊を有していました。また、「天皇の軍隊」「日本国の軍隊」としての『国民』意識も高く、これが、士気につながりました。
:このような違いから、黄海およびその沿岸での戦闘という局地的な戦争では、国の規模の違いにかかわらず勝つことができたということです。
</small>
|}</div>
==== 日露戦争 ====
[[画像:Location-of-Liaodong-Peninsula.png|thumb|150px|left|遼東半島]]
[[ファイル:Kisaburō Ohara, Europe and Asia Octopus Map, 1904 Cornell CUL PJM 1145 01.jpg|thumb|300px|right|1904年当時、日本人がロシアにもったイメージを伝える風刺地図。]]
:下関条約で、日本は、台湾などとともに中国本土の遼東半島の割譲を受けましたが、ロシア、ドイツ、フランスが反対し('''{{ruby|三国干渉|さんごくかんしょう}}'''<ref>「干渉」とは、「他のものの動きに影響を与える」という元々の意味から、このような場合、「他国の政治に口を出す」という意味で使われています。</ref>)、遼東半島の割譲は取りやめとなりました。ところが、その遼東半島にはロシアが進出し、{{ruby|大連|だいれん}}、{{ruby|旅順|りょじゅん}}<ref name="中国地名"/>といった都市を建設し始めました。
:ロシアは、ユーラシア大陸を横断する鉄道('''シベリア鉄道''')を建築し、ヨーロッパとアジアの間の物流をおさえようとしていました<ref>日本からイギリスやフランスまで、船ならば45日〜50日かかったところを、シベリア鉄道を使えば15日程度で移動できました。</ref>。シベリア鉄道は、もともと、ロシア領内をウラジオストックまでのものですが、ロシアは遼東半島支配に伴って、大連まで{{ruby|東清|とうしん}}鉄道を建設し、その途中である{{ruby|満州|まんしゅう}}地域<ref>現在は、中国東北部と呼ばれる地域です。もともと、「満州(満洲)」とは清王朝をおこした民族(女真族)の名前で地名ではありませんが、「満洲族が起こった土地」と言うことで通称として用いられるようになりました。このころから、1945年頃まで、満州は日本にとって歴史上重要な土地となります。</ref>を実質的に植民地とするなど支配を強めます。そして、満州に接する朝鮮(日清戦争後、{{ruby|大韓帝国|だいかんていこく}})の政治にも介入するなどしはじめました<ref>ロシア進出の背景には、大韓帝国の王室のメンバーや{{ruby|両班|ヤンバン}}と呼ばれる高級官僚らが、朝鮮の政治・経済に段々影響を強めてくる日本を警戒して、それに対抗するため、ロシアと通じていたということもあります。</ref>。
:日本は、ロシアの動きに対して警戒しました。ロシアが満州地域でやっていることは、他のヨーロッパ諸国がアジアやアフリカでやっていて、日清戦争後に中国本土で進められている植民地化であって、そのままでは、満州地域だけでなく、朝鮮半島も、さらには日本までもが、植民地となってしまうのではないかと考えました<ref>これは、大げさな話ではなく、アフリカの植民地化はこの時期に進み、19世紀末には独立国は、エジプト周辺、エチオピア、リベリアだけになっていましたし、アジアも1887年にフランスがベトナムを植民地にするなどして、独立を保っていたのはシャム王国(現在のタイ王国)くらいになっていました。</ref>。
:日本政府では、伊藤博文に代表される日露の衝突を外交努力などで避けるべきとするグループがあった一方で、陸軍に対して大きな影響を持った'''[[小学校社会/6学年/歴史編/人物事典#山県有朋|{{ruby|山県|やまがた}}(山縣){{ruby|有朋|ありとも}}]]'''や首相の{{ruby|桂太郎|かつらたろう}}、外交官出身の外務大臣'''[[小学校社会/6学年/歴史編/人物事典#小村寿太郎|{{ruby|小村寿太郎|こむらじゅたろう}}]]<span id="小村寿太郎"/>'''らは、戦争は避けられないので、それに向けての準備をするという態度に出ました。日本国内では、戦争に向け軍艦を整備したり新たな兵器の開発を行う一方で、ロシアの中央アジアからインドへの南下などを警戒するイギリスと同盟を結び、ロシアとの戦争に備えました。
[[file:Nichirojp.png|thumb|300px|日露戦争の経過]]
:1904年(明治37年)日本とロシアは開戦し('''日露戦争''')、日本とロシアは、ロシアが植民地としていた遼東半島や満州で戦いました。ロシアは、モスクワなどから遠い極東に兵や兵器・軍馬・食料などを送るには、シベリア鉄道に頼るしかないので、すぐに戦場で攻撃の体制を作ることはできません。一方で、日本も、兵などを送るには日本海を渡らなければならないので、この地域の{{ruby|制海|せいかい}}権<ref>ある地域を自由に航行できるということ。</ref>を握る必要がありました。海軍はロシアの太平洋側の主力艦隊である旅順艦隊をせめ有利な立場になりますが、旅順艦隊は、援軍である世界最大級の艦隊バルチック艦隊<ref>「バルト海」で行動する艦隊なのでバルチック艦隊といいます。</ref>が到着するまで、旅順港に待機することになりました。日本陸軍は遼東半島南端から東進鉄道沿いに北上、朝鮮国境からの軍とあわせ、ロシア軍を満州地域北部までおしもどしました。また、旅順に引き込んだ艦隊がバルチック艦隊と合流すると制海権が危うくなるので、'''{{ruby|乃木希典|のぎまれすけ}}'''<ref>死後、乃木神社にまつられます。乃木坂などの地名にも残っています。</ref>が率いる陸軍の軍団が、要塞となった旅順を攻撃します。この旅順を囲む戦いは、日露戦争の中でも多くの日本兵の犠牲を出しましたが1905年(明治38年)1月に降伏し、バルチック艦隊のみを迎えうつことになりました。そうして、5月に'''[[小学校社会/6学年/歴史編/人物事典#東郷平八郎|{{ruby|東郷平八郎|とうごうへいはちろう}}]]'''がひきいる日本海軍は日本海海戦でバルチック艦隊をやぶり、日本海の制海権を安定したものにしました。
:日本は、戦争を有利に進めたとことで、アメリカ合衆国大統領'''セオドア・ルーズベルト'''に講和の仲介を依頼し、日本からは'''[[#小村寿太郎|小村寿太郎]]'''が、ロシアからは'''ウィッテ'''(前蔵相、のちに初代首相)が、米国のポーツマスに出向き、講和会議が開かれました。1905年9月5日、以下の事項を決めた条約('''ポーツマス条約''')が結ばれ、ロシアは中国から撤退し、日露戦争は日本の勝利で終わりました。
:# ロシアは日本の朝鮮半島における優越権を認める。
:# 日露両国の軍隊は、鉄道警備隊を除いて満州から撤退する。
:# ロシアは樺太の北緯50度以南の領土を永久に日本へ譲渡する。
:# ロシアは東清鉄道の内、旅順-長春間の南満洲支線と、付属地の炭鉱の{{ruby|租借|そしゃく}}<ref>土地などを、借り受けるという意味ですが、実質的な支配が行われ、「租借地」というのは、「植民地」とほぼ同義語になります。</ref>権を日本へ譲渡する。
:#*この路線は、「南満州鉄道」と改称され、日本の満洲進出の基礎となります。
:# ロシアは関東州(旅順・大連を含む遼東半島南端部)の租借権を日本へ譲渡する。
:# ロシアは沿海州沿岸の漁業権を日本人に与える。
:ポーツマス条約では下関条約と異なり賠償金の支払いはありませんでした。一部の日本国民はこれを不満に思って、暴動をおこすものもありました。しかし、国民には知らされていませんでしたが、戦争を有利に進めていたとはいえ、これ以上は財政上ほとんど無理な状態になっていて、すぐにでも戦争をやめなければならない状態になっていました。ロシアはそれを見越して、敗戦国でありながら、比較的有利な条件で講和条約を結んだといえます。
:しかし、この結果、満州や朝鮮半島に対するロシアの脅威は去りましたので、日本は、この地域への進出を高めます。特に、満州は石炭や鉄鉱石の地下資源が豊かな地域であったため鉱山開発を盛んに行いました。
:韓国については、政治的な不安定を理由に日本の属国化が進められ、1905年12月には統監府が設置され、伊藤博文が初代統監に就任しました。
:1909年 (明治42年)、伊藤博文はロシアとの外交交渉のため満州のハルビンに出向きましたが、そこで、朝鮮民族主義者に暗殺されます。それまで、韓国に対しては朝鮮民族に対し強硬的に望む人たちと、穏健に進めるべきという人たち(伊藤博文もその意見でした)が対立していたのですが、伊藤博文が暗殺されたことで、強硬派の勢いを増し、1910年(明治43年)8月に、日本は大韓帝国を併合しました('''{{ruby|韓国併合|かんこくへいごう}}''')。
:<span id="辛亥革命"/>日露戦争は、日本とロシアの戦争でしたが、その戦いは清国の領土でなされました。清国は、もはやそれを止める力を失っていました。中国の人々は、外国に国土を侵される不安が高まり、中国の人々が政治参加をする国をつくるため、1911年{{ruby|孫文|そんぶん}}が主導者となって革命を起こしました('''{{ruby|辛亥革命|しんがいかくめい}}''')。翌1912年清王朝は滅ぼされ、アジアにおいて史上初の独立した共和制国家である{{ruby|中華民国|ちゅうかみんこく}}が誕生しました。
<div style="margin:0 2em 0 4em">
{| class="wikitable" style="width:100%"
|'''【脱線 - 覚えなくてもいい話】<span id="南下政策"/>ロシアの南下政策<small>
:ロシアは、ヨーロッパの国の中では最も東にあって、17世紀にシベリアを征服し太平洋に達する領土を持つ大きな国ではあったのですが、ヨーロッパ中心部から離れていたので産業革命などはおくれてつたわりました。また、国土の多くが北にあったため、冬にほとんどの港が凍結するなどして、通商などにも支障が出るため、南へ勢力を伸ばす政策をとっていました。これを、「『{{ruby|不凍港|ふとうこう}}』を求めての南下」と言ったりします。19世紀、{{ruby|黒海|こっかい}}を勢力におさめようと、1853年トルコ(オスマン帝国)の領土であったバルカン半島などで戦争(クリミヤ戦争<ref>ロシアは、バルカン半島を南下しようとしたのですが、イギリス・フランスの参戦により押し戻され、クリミア半島が主要な戦場となりました。クリミヤ半島は、現在(2022年4月)、ロシアの侵攻で話題になっているウクライナの黒海地域です。</ref>)を起こしましたが、トルコをイギリスやフランスが支援し、この戦争ではロシアは敗北します<ref>クリミア戦争で、戦傷者の救護を組織的に行い、看護師による近代看護を確立したのが、フローレンス・'''ナイチンゲール'''です。</ref>。その後のバルカン半島の各民族の独立運動に合わせ、1877年オスマン帝国と戦争(露土戦争)をし、これに勝利しバルカン半島を経由したロシアの南下路が開けます。しかし、軍事的な勝利を収めたロシアの勢力拡大に対して欧州各国が警戒感が広がったため、ドイツ帝国の首相ビスマルクが主導し、1878年ベルリン会議を開き、ロシアの南下政策を止め、ロシアはバルカン半島方面の南下を一旦断念します。
:そこで、ロシアは、ヨーロッパ方面から世界へ出ることをあきらめ、東側のシベリアを経由して中央アジアや太平洋への進出をもくろみます。その結果のひとつが、三国干渉及びそれに続く遼東半島への進出です。
:しかし、日露戦争に敗れたため、ロシアは、ふたたび西へ目を向けます。そこで、バルカン半島から東に勢力を伸ばそうとしていたドイツとぶつかります。これが、第一次世界大戦の原因の一つとなります。
</small>
|}</div>
<div style="margin:0 2em 0 4em">
{| class="wikitable" style="width:100%"
|'''【脱線 - 覚えなくてもいい話&考えてみましょう】日本は、どうしてロシアに勝てたのでしょう<small>
:ここでは、なぜ、ロシアはやぶれ、日本は勝つことができたのかを考えてみましょう。
:双方の国の規模ですが、日本とロシアでは、人口で3倍、国家予算で10倍、常備軍で5倍という、大きな差がありました。また、清国と違い、ロシアの軍隊はロシア皇帝の下に組織された近代的な軍隊でした。実際、戦没者はロシアが81千人程度のところ、日本は88千人と日本の方が被害が大きかったりしています<ref>当時は、戦場の衛生環境などが悪く、病気になって亡くなる兵士も少なくありませんでした。日露とも、戦没者の1/4が病没者で。特に日本の病没の原因としては、ビタミンB欠乏症の「{{ruby|脚気|かっけ}}」が目立っていて、これは、日本陸軍の医療関係者が、当時新興の栄養学を軽視したためとも言われています。この医療関係者には、小説家の森鴎外もいました。</ref>。
:このように、日本に大きな被害が出た戦争であっても、ロシアが強気に出られなかったのは、サンクトペテルブルクやモスクワなどがある本拠地であるヨーロッパから、鉄道で10日以上かかる遠隔の地で兵隊を送ろうとしても、1日に数千人程度が限界だったからでしょう<ref>戦争において装備に大きな差がなければ、数の違いは大きく影響します。</ref>。ロシアにとっては、バルチック艦隊が日本海の制海権をにぎって、日本が大陸に兵隊や物資を送れなくすることで逆転をもくろんだのですが、日本海海戦でその希望もなくなり、ロシアは戦争の継続をあきらめたのだと思われます。
:バルチック艦隊は強力な艦隊でしたが、日英同盟により、インドなどイギリス植民地への寄港<ref>当時の軍艦の動力は蒸気機関であっったため、石炭と真水を大量に積み込む必要がありました。</ref>が拒否されたため、大西洋から、アフリカの南を回ってインド洋経由で7ヶ月もの航海ののちの到着でした。また、ロシアは身分制が残っており、士官は貴族階級など上流階級の出身者が多く、それに対して、水兵などは農民出身の者や都市の労働者などが多く、航海での待遇の差もあり、航海中から対立も生じていました。
:この上流階級と庶民階級の対立は、海軍だけでなく、陸軍でも見られました。なにより、ロシア国内の一般的な生活でも見られたのです。いくら国の規模が大きいとはいえ、戦争は国民生活に商品不足・インフレーションの影響を与えます。もともと、民衆からの不満がみられ、革命運動もあったところ、日露戦争によるインフレーションと数々の戦いで敗戦したとの知らせで民衆の間に暴動が頻発し、1905年には革命と言っていい状態になっていました。このような国内の不安定さから、ロシア政府は講和を急ぐようになり、日本の勝利につながったといえます。
</small>
|}</div>
=== 条約改正と国際社会での地位の向上 ===
[[File:Chikamatsu Kiken buto no ryakuke.jpg|thumb|300px|鹿鳴館における舞踏会を描いた浮世絵]]
;不平等条約改正の歩み
:幕末に欧米各国と結ばれた通商条約(不平等条約)の改正は日本政府の悲願でした。
:明治政府は、文明開化が進んで欧米並みの文明国になったことを示すため、さまざまなアピールをします。たとえば、1883年(明治16年)に外務卿{{ruby|井上馨|いのうえかおる}}は、'''{{ruby|鹿鳴館|ろくめいかん}}'''という、外国からの重要な来訪者や外交官を接待するための社交場を建設し、舞踏会を開いたりしていました。鹿鳴館での舞踏会などには、政府高官の夫人や娘なども参加しましたが、当時はドレスなどの洋装、欧米風の応対のマナーやエチケット、また、ダンスなどは全く一般的ではなく、必死の訓練などがあったと言われています。しかし、このような取り組みは、欧米人には「{{ruby|滑稽|こっけい}}」と感じられたと言う記録も残っており、あまりうまくいきませんでした。
:一方で、政府は、まず[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#治外法権|治外法権]](領事裁判権)の撤廃のため、国内の法整備を進め、公正な裁判が行われることを諸外国に示そうとしました。領事裁判権の裁判は犯罪に関するものなので、法律に関するフランス人の[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#お雇い外国人|お雇い外国人]]ボアソナードが指導してフランスの法律をもとにして、1880年(明治13年)に犯罪とその刑罰に関する刑法<span id="刑法"/>と刑事手続と裁判を定めた治罪法<ref>後に、刑事訴訟法に改正されます。</ref>が制定され、1882年(明治15年)施行されました。1889年(明治22年)には、[[#明治憲法|明治憲法]]が発布され法制度が欧米並みに整理されたことが、国際的に示されました。外務大臣'''[[#陸奥宗光|陸奥宗光]]'''は、各国と粘り強く交渉し、まず、1897年(明治30年)イギリスとの間で治外法権を撤廃する条約を結び、日清戦争終結後の1899年(明治32年)すべての国との間で治外法権を撤廃しました。
:そして、日露戦争の勝利は、世界に驚きをもってむかえられ、国際的地位も上がったことをうけて、外務大臣'''[[#小村寿太郎|小村寿太郎]]'''が主導し、1911年(明治44年)関税自主権も回復しました。
<div style="margin:0 2em 0 4em">
{| class="wikitable" style="width:100%"
|'''【脱線 - 覚えなくてもいい話】大津事件<small>
:1891年(明治24年)、日本を訪問中のロシア帝国皇太子ニコライ(後の皇帝ニコライ2世)が、滋賀県大津市で警備中の警察官に突然サーベルで切りつけられケガを負うと言う事件がありました。
:驚いた日本政府は、すぐに明治天皇自身が見舞いに駆けつけるよう手配し、日本を離れる際も自身で見送りました。大国ロシアの皇太子に対して小国日本の国民しかも警察官が暗殺{{ruby|未遂|みすい}}<ref>殺そうとした相手が死ななかったことを言います。</ref>をおかしたということで、ロシアが攻めてくるかもしれない、そして、当時の日本ではロシアに勝てるはずがないということで、日本国内は、大騒ぎになりました。
:明治政府は、犯人を死刑に処してロシア政府に対して謝罪の意も示そうとしました。
:ところが、当時の[[#刑法|刑法]]では、殺人未遂の最高刑は無期{{ruby|徒刑|とけい}}<ref>現在の言い方では「無期{{ruby|懲役|ちょうえき}}」、一生、刑務所に入れられる刑です。</ref>で、死刑とすることはできません。そこで、政府は、天皇や皇室に暴行などを加え死傷させた場合に適用される{{ruby|大逆|たいぎゃく}}罪を適用するよう裁判所に要請しました。しかし、これは「法律に定められていること以外を罪としてはならない」という近代法の原則「{{ruby|罪刑|ざいけい}}{{ruby|法定|ほうてい}}主義」に反します。大審院院長<ref>現在の最高裁判所長官に相当します。</ref>{{ruby|児島惟謙|こじまいけん}}は、事件の裁判所に、法律に従って判決を下すよう指示し、その結果、死刑ではなく無期徒刑の判決となりました。
:このことは、ロシアとの外交関係を難しくさせるおそれがありましたが、欧米諸国に対しては、「日本は、法律を厳格に守る国である」ということが印象付けられ、条約改正に向けても信用を得ることができました。
</small>
|}</div>
;<span id="国際社会"/>国際社会での地位の向上
: 1912年(明治45年・大正元年)大正天皇が即位し、元号が「'''大正'''」となりました。
: 1914年(大正3年)にヨーロッパの国々を二分した'''[[小学校社会/6学年/歴史編/戦争への道と現代の民主国家日本の誕生-昭和から現在まで#全世界を巻き込む戦争 - 第一次世界大戦|第一次世界大戦]]'''が始まりました<ref>第一次世界大戦については[[小学校社会/6学年/歴史編/戦争への道と現代の民主国家日本の誕生-昭和から現在まで|次の章]]で詳しく説明します。</ref>。日本は、イギリスやフランスの属する協商国に参加し、敵対する同盟国の一つであるドイツが租借する中国の{{ruby|青島|チンタオ}}<ref name="中国地名"/>や南太平洋の島々を占領しました。1919年戦争は協商国の勝利に終わり、翌年、平和を維持するための'''国際連盟'''が設立、日本は英仏などとともに常任理事国の一つとなりました。
: 第一次世界大戦は、今までに見られなかったほどの大規模な戦争で、戦場が全国土に広がり多くの工場設備なども失われ、工業生産が止まってしまったりしました。しかし、主な戦場はヨーロッパで、日本への被害はほとんどなかったため、日本は、ヨーロッパの工業生産に代わって、綿糸や綿布といった繊維製品や化学肥料など、さまざまな工業製品を輸出しました。また、日本へのヨーロッパからの輸入が止まったため、それにかわる重工業などが起こるきっかけにもなり、国際取引においても機械など高度な工業製品を輸出できる国となりました。第一次世界大戦の影響で日本の経済は急速に成長しました。
;明治後期から大正にかけての人々の生活や文化と学問
:明治維新後、さまざまな[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#殖産興業|殖産興業]]の取り組みによって、経済的余裕ができ、国民生活は向上し、さまざまな近代文化の進展が見られました。また、欧米から伝わった工業的な製紙法と活版印刷は安価で大量の印刷を可能として、新聞や雑誌が広く普及します。これら新聞や出版業の発達したことと、[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#学校|学校制度]]が定着し教育水準が上がったことで、国民の政治参加の意識も高まりました。
:さらに、日清戦争・日露戦争といった戦争で、納税額が多いかどうか、つまり財産が多いかどうかにかかわらず、国民として平等に生命を犠牲にするということが意識され、納税額による選挙権の制限([[#制限選挙|制限選挙]])をやめて、成人であれば誰にでも選挙権が与えられる「普通選挙」を求めた社会運動('''普選運動''')がおこり、1925年(大正14年)すべての男性が選挙権を有する普通選挙法が成立しました。このような、民主化の動きを「'''大正デモクラシー'''」と言います。しかし、まだ女性には選挙権は認められていませんでした。
:<span id="政党政治"/>このように、国民の政治への関心が高まると、選挙で選ばれた国会議員である衆議院の発言力が強まり、内閣総理大臣なども衆議院の意向を受けて選び出されることもありました。しかし、一方で国の政策を決めるのに議会での議論がなされるようになり、政党同士の争いもあって、無駄な議論がなされるように見えることもありました。また、政策に関しての、議員の{{ruby|汚職|おしょく}}なども発生するようになりました。
:[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#文明開化|文明開化]]を受けて、日本には西洋風の文化が広く普及し、明治20年(1887年)代以降になると、それを受けた独自の文化が育ってきました。
:新聞や出版業の発達は上で述べたとおり人々の政治への意識を高めたところですが、そこには、政治的な考えなどだけではなく、人々の娯楽としての小説なども掲載されるようになりました。明治も初めのうちは、歌舞伎の演目などを題材としたものが多かったのですが、1885年(明治18年)、{{ruby|坪内逍遥|つぼうちしょうよう}}は、『{{ruby|小説神髄|しょうせつしんずい}}』をあらわし、人々の普段の生活に近い題材をとりあげる、いわゆる近代文学を提唱しました。またその中で、話し言葉と書き言葉の間の大きな違いから、もっと平易で話し言葉に近い言葉を使うよう進められました。これを{{ruby|言文一致|げんぶんいっち}}運動といいます<ref>ただし、今でも話し言葉と書き言葉は同じものではありません。</ref>。このような動きのなかで、多くの近代文学というものが生まれました。その中には、1895年(明治28年)に『たけくらべ』を書いた{{ruby|樋口一葉|ひぐちいちよう}}のような女性もいました。その後、{{ruby|森鴎外|もりおうがい}}や{{ruby|夏目漱石|なつめそうせき}}があらわれ、近代文学が確立します。特に、夏目漱石が1905年(明治38年)に初めて書いた小説『{{ruby|吾輩|わがはい}}は猫である』はユーモアに富んだ内容と落語にヒントを得たとされる平易な語り口調で広く普及し、日本語の書き言葉の元になったとも言われています。
:美術の分野では、写実的な西洋絵画や彫刻が日本でも制作されるようになりました。政府は1887年(明治20年)、「東京美術学校<ref name="芸大">「東京美術学校」と「東京音楽学校」は、のちに合併し「東京{{ruby|藝術|げいじゅつ}}大学」となります。</ref>」を設立し、西洋絵画の製作者や指導者を育てました。
:また、音楽の分野でも西洋音楽の受け入れが進み、1890年(明治23年)、演奏家・作曲家や指導者を育てる「東京音楽学校<ref name="芸大"/>」が開校しました。
:学問の分野では、[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#学校|大学教育]]が定着し、日本の科学技術の水準も世界的なものになってきました。物理学では原子のモデルを提唱した{{ruby|長岡半太郎|ながおかはんたろう}}、数学の分野では{{ruby|高木貞治|たかぎていじ}}といった世界的に評価される研究者も登場するようになりました。
:特に、人々の生活に密着した医学の分野では、世界的に進みつつあった細菌学の分野で多くの成果が見られ、破傷風の治療法の研究やペスト菌の発見をおこなった'''[[小学校社会/6学年/歴史編/人物事典#北里柴三郎|{{ruby|北里柴三郎|きたざとしばさぶろう}}]]'''、{{ruby|赤痢|せきり}}菌を発見した{{ruby|志賀潔|しがきよし}}、黄熱病や梅毒の研究で知られ、ノーベル生理学・医学賞の授賞候補ともなった'''[[小学校社会/6学年/歴史編/人物事典#野口英世|{{ruby|野口英世|のぐちひでよ}}]]'''のように国際的な研究者がでてくるようになりました。
<div style="margin:0 2em 0 4em">
{| class="wikitable" style="width:100%"
|[[ファイル:Noguchi Hideyo.jpg|thumb|120px|right]]
'''【脱線 - 覚えなくてもいい話】<span id="野口英世"/>野口英世<small>
:本文に書いたとおり、野口英世は、国際的に活躍した細菌学者で、現在、その肖像が1000円札に使われている人です。子供の頃から大変苦労して勉強して、多くの業績を残した人で、皆さんの中で、野口英世の伝記を読んだことのある人も少なくないでしょう。ここでは、野口英世の生涯について簡単に紹介して、なぜ彼が偉人とされているかをお話ししたいと思います。
:1876年(明治9年)、英世<ref>元の名は「清作」で「英世」は22歳になって改名したものですが、ここでは、「英世」で統一します。</ref>は福島県耶麻郡三ッ和村(現:耶麻郡猪苗代町)に生まれます。貧しいというほどではありませんが、決して余裕のある家の生まれではありませんでした。英世は1歳の時に{{ruby|囲炉裏|いろり}}に落ち、左手に大{{ruby|火傷|やけど}}を負います。ただれた皮膚で指がくっついて開かなくなるというひどいものでした。英世は、学校に上がるようになると、このことでいじめられました。しかし、英世の学校の成績はとても素晴らしいものでした。英世の家計では、上級の学校に出すのは難しく、普通は小学校を出て働きに出るとことだったのですが、これを惜しんだ教師や地域の人がお金を出し合って、上の学校へ進ませました。また、火傷あとが不便であろうと、やはりお金を出し合って、まだ珍しかった西洋医術による手術を受けさせ、左手を使えるようにしました。英世はこの手術の成功に感激したことがきっかけで医師を目指すこととなりました。
:1896年(明治29年)英世は上京し、医学を学びます。1900年(明治33年)米国に渡り、研究を始めます。そして、アメリカを拠点として基礎医学の分野で数々の業績をあげ世界的な名声を得て、何回かノーベル生理学・医学賞の候補者ともなりました。
:1918年(大正7年)以降は{{ruby|黄熱|おうねつ}}病の研究に打ち込み、黄熱病の流行地域である南アメリカ各国やアフリカに渡って研究を続けます。しかし、黄熱病の研究中に自身もその病にかかり、1928年(昭和3年)アフリカのイギリス植民地ゴールド・コースト(現:ガーナ共和国) アクラで亡くなります。
:野口英世が偉人とされるのは、
:*庶民の出身であるにもかかわらず、高い能力で医者・研究者の地位についた<ref>大学以上の高等教育を受けさせることは当時の庶民にはめったにないことでした。また、英世の出身地会津は、戊辰戦争で官軍に抵抗し、政府などに関係者も少なく、薩長などの出身者より不利なところもありました。</ref>。
:*体に受けたハンディキャップにも負けず、努力して勉強した<ref>当時、家が貧しくても、軍隊に入って勉強するという方法もありましたが、英世の場合、このやり方は難しかったと考えられます。</ref>。
:*能力を世に出そうと、周囲の人が協力した。
:*日本ではなく、国外の研究所を拠点として国際的な活躍をした。
:というところにあると思います。野口英世の業績自体は、その後の医学の発展によって否定されたものも少なくはありませんが、目標に向けて努力する姿には見習うものがあると思います。
</small>
|}</div>
:日本の経済力が大きくなることにともなって、人々の暮らしもだんだん豊かなものになっていきましたが、この時期に、大きな災害に見舞われてもいます。
:まず、<span id="スペインかぜ"/>1918年(大正7年)から1920年(大正9年)にかけて世界中で流行した'''スペインかぜ'''といわれるインフルエンザの大流行です。当時は第一次世界大戦の交戦中であったため、軍人を中心に広く行き来し世界中で流行しました。全世界で30%にあたる5億人が感染し、少なくとも1700万人の死者がでたものと推定されています。日本においてもこの3年間で約40万人程度の死者が出ました<ref>最近のコロナ禍で、2020年から2022年7月現在の死者の累計数が約3万人であることと比較してみてください。</ref>。
:もう一つは、<span id="関東大震災"/>1923年(大正12年)9月1日、南関東一円を襲った'''関東大震災'''です。マグニチュード7.9〜8.3と推定される大地震<ref>1000年に1度と言われる2011年東日本大震災のマグニチュードは9.0で特別ですが、1995年阪神淡路大地震のマグニチュードは7.3くらいです。</ref>で、約1万人が倒れた建物の下敷きになって亡くなり、約9万人が、地震ののちに発生した火災で亡くなりました。
== 脚注 ==
以下は学習の参考ですので覚える必要はありません。<small>
<references/></small>
----
{{前後
|type=章
|[[小学校社会/6学年/歴史編]]
|[[小学校社会/6学年/歴史編/歴史の流れをつかもう|日本の歴史の流れ]]
|[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代|明治維新と近代国家日本の成立-幕末・明治時代]]
|[[小学校社会/6学年/歴史編/戦争への道と現代の民主国家日本の誕生-昭和から現在まで|戦争への道と現代の民主国家日本の誕生-昭和から現在まで]]
}}
[[Category:社会|しようかつこうしやかい6]]
[[Category:小学校社会|6ねん]]
[[Category:小学校社会 歴史|#12]]
1j77n1p8rpgwxt23yjg1w71lfxup8ak
205711
205688
2022-07-22T23:08:46Z
Tomzo
248
wikitext
text/x-wiki
{{Nav}}
{{Pathnav|メインページ|小学校・中学校・高等学校の学習|小学校の学習|小学校社会|6学年|歴史編|frame=1}}
{| class="wikitable" style="width:100%"
|+ この章の概要
|<!--1889年前後から「国際的地位が向上」(1920年国際連盟成立 常任理事国入り)まで--><!--(コ) 大日本帝国憲法の発布,日清・日露の戦争,条約改正,科学の発展などを手掛かりに,我が国の国力が充実し国際的地位が向上したことを理解すること。-->
★時代区分:明治時代後期、大正時代</br>
★取り扱う年代:1889年(大日本帝国憲法の発布)から1925年(昭和改元)まで
; 大日本帝国憲法の制定
: 明治維新の改革は、五箇条の御誓文の方針によりなされましたが、改革が進み近代文明国としての形がひととおり整ってきたところ、さらに政治の形を確かなものとし、人々の権利を明らかにするため、'''憲法'''の制定と選挙によって選ばれた議員による議会を開くことが求められました。'''板垣退助'''や'''大隈重信'''は国会の開設を求めて、政党をつくりました。'''伊藤博文'''を中心とした明治政府は欧米諸国の憲法を研究し、1885年に'''内閣制度'''が創設され、1889年に'''大日本帝国憲法'''が発布されました。翌年憲法の精神に基づいて、初めて総選挙が行われ'''帝国議会'''(国会)が召集されました。
; 日清戦争と日露戦争
: 急激な近代化に成功した日本は、国内で拡大した産業の新たな市場を求め大陸に進出しようとします。朝鮮は中国の帝国'''{{ruby|清|しん}}'''の属国でしたが、その影響で近代化が進んでおらず、朝鮮国内の近代化を求める人々は日本と協力して清の影響から逃れようとしました。朝鮮国内の清に従う保守派と改革派の争いに日本と清はそれぞれ兵を出すなどして緊張が高まり、1894年朝鮮半島西岸における両国海軍の接触をきっかけに'''日清戦争'''が始まりました。日本は清の北洋海軍を壊滅させ、遼東半島を占領するなど戦いを有利に進め、翌年、'''陸奥宗光'''外務大臣と清の提督である李鴻章が交渉し、清の日本への賠償や台湾・遼東半島の割譲などを定めた下関条約が締結され講和が結ばれました(日本の勝利)。
: 遼東半島はロシア、ドイツ、フランスが反対したので割譲は取りやめとなりましたが(三国干渉)、そこにロシアが進出し、それを警戒する日本と対立しました。1904年日本とロシアは開戦し('''日露戦争''')、日本とロシアは、ロシアが植民地としていた遼東半島や中国東北部(満州)で戦いました。日本は多くの犠牲者を出しましたが、'''東郷平八郎'''がロシアのバルチク艦隊をやぶるなどして有利な位置となり、翌年、'''小村寿太郎'''外務大臣とロシアのウィッテが交渉し、ロシアの中国からの撤退、南満州鉄道の譲渡、南樺太の割譲などを定めたポーツマス条約が締結され講和が結ばれました(日本の勝利)。
; 条約改正と国際社会での地位の向上
: 幕末に欧米各国と結ばれた通商条約(不平等条約)の改正は日本政府の悲願でした。まず、政府は、国内の法整備を進め、公正な裁判が行われることを示し、日清戦争終結後の1899年治外法権を撤廃しました。そして、日露戦争の勝利は、世界に驚きをもってむかえられ、国際的地位も上がったことをうけて、1911年関税自主権も回復しました。
: 1912年大正天皇が即位し、元号が「'''大正'''」となりました。
: 1914年にヨーロッパの国々を二分した'''第一次世界大戦'''が始まりました。日本は、イギリスやフランスの属する連合国に参加し、敵対する同盟国の一つであるドイツが租借する中国の{{ruby|青島|チンタオ}}や南太平洋の島々を占領しました。1919年戦争は連合国の勝利に終わり、翌年、平和を維持するための'''国際連盟'''が設立、日本は英仏などとともに常任理事国の一つとなりました。
: このころになると、日本の科学技術の水準も世界的なものになり、'''野口英世'''のように国際的な研究者がでてくるようになりました。
|}
=== 世界の変化2 - 市民革命 ===
:日本が鎖国をしている間、ヨーロッパやそれを受けたアメリカ大陸では、[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#世界の変化1 - 産業革命|産業革命]]ともうひとつの大きな社会変革が起こっていました。
;市民革命以前のヨーロッパ
:ヨーロッパの国々も長い間、生まれながら身分によって職業などが決められ、多くの人々は農民や職人として土地(荘園)の領主(「{{ruby|封建|ほうけん}}領主」といいます)や都市の貴族などに服従する社会でした。また、この時代は、ローマ教皇を頂点とする'''カトリック教会'''が、強い影響力や荘園を持っていたというのは、[[小学校社会/6学年/歴史編/戦乱の世の中と日本の統一-戦国時代・安土桃山時代#キリスト教|前にお話ししたとおり]]です。この時代を{{ruby|封建|ほうけん}}制<ref>土地(領地)を間に介して、主従関係を結ぶ制度を言います。日本でも、[[小学校社会/6学年/歴史編/武家社会の始まり-鎌倉時代#封建制|鎌倉時代の「'''ご恩と奉公'''」の関係]]はこれにあたりますし、安土桃山時代から江戸時代にかけての[[小学校社会/6学年/歴史編/戦乱の世の中と日本の統一-戦国時代・安土桃山時代#石高制|石高制]]も封建制の一種です。</ref>の時代と言います。
:14世紀くらいになると、都市を中心に商業が発展してきて、豊かな財産を持って、荘園領主よりも強い影響力を持つようになる者もでてきました。15世紀「[[小学校社会/6学年/歴史編/戦乱の世の中と日本の統一-戦国時代・安土桃山時代#大航海時代|大航海時代]]」になると、さらに、貿易や植民地からの収益で都市の商人などは勢力を強くしました。また、繊維工業などを中心に、人を集めて工場などを経営する人たちもあらわれました。これらの、封建領主や貴族ではない階層の人たちを、「{{ruby|市民|しみん}}階級」といいます。これらの、市民階級の経済力を背景に、ヨーロッパの各地で強い力を持った国王が誕生し、伝統的な荘園領主などを圧倒しました。これを、{{ruby|絶対王政|ぜったいおうせい}}の時代といいます。絶対王政の王国は、政治を行う政府は専門の役人をおき、戦争に備えて軍隊を平時から常設するようになりました<ref>封建制の時代は、国王でも自分の荘園をおさめられる程度の役人がいればよく、戦争などでは、その都度、封建領主に命令して軍隊(騎士)を集めていました。</ref>。
;市民革命と近代国家
:市民階級が台頭してくると、封建制度以来の身分制度に対して、生まれながらの身分にかかわらず人間は'''平等'''であり、'''自由'''に発言や経済活動をする'''権利'''('''人権''')を持っているという考え方が広がってきました。また、封建制の時代はおさめている荘園の収穫から政治を行っていましたが、絶対王政の政府は、市民階級からの税金で成り立っていたのですが、税金を取られる市民たちは国王の都合だけで徴税されることに不満を持ち始めました。こうして、17世紀以降、市民階級は絶対王政と対立するようになります。市民階級は代表を出して、政治に参加するようになります。'''議会'''('''国会''')の始まりです。さらには、国王の圧政に対しては、市民階級が集まって武力をもって王政を倒したりしました。これを「'''{{ruby|市民革命|しみんかくめい}}'''」と言います。
:市民革命は、17世紀のイギリスに始まりました ('''清教徒革命'''など)。ひきつづいて、北アメリカ大陸のイギリス植民地が、独立を求めて戦争を起こしアメリカ合衆国が成立しました ('''アメリカ独立戦争''')。そして、1789年代表的市民革命である'''フランス革命'''が起こります。市民革命は、フランスの'''ナポレオン'''が、フランスの革命政府を打ち倒そうとする周辺の国々を逆にせめた戦争によってヨーロッパ各地に広がります。
:市民革命自体は、各国の状況によって様々な結果を生みました。革命後に王政が復活した国もあります。しかし、市民革命で国の政治に身分によらない一般の市民が参加できるようになって、広く国全体から資金を集める仕組みができたこと、また、兵隊に国民が動員されるようになったこと('''[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#徴兵制|徴兵制]]''')から、数が多く強力な軍隊を持つようになり、それまでの、封建的な国や絶対王政の国を圧倒するようになりました。これらの古い体制の国々も、市民階級を国の政治に参加させるように、国の仕組みを変えるようになりました。まず、国民の権利を保障し、国民の代表が参加する'''議会'''を設置して国の政治に参加できるようにしました。そして、そのことを'''憲法'''という、強い力を持った法律に定めるようになりました。
:国が、国王などの所有物ではなく、そこに住む国民によって成立するという近代国家('''国民国家''')の誕生です。
=== 大日本帝国憲法の制定 ===
[[File:Taisuke ITAGAKI.jpg|thumb|125px|板垣退助]]
[[File:OKUMA_Shigenobu.jpg|thumb|125px|大隈重信]]
[[file:Itō Hirobumi.jpg|thumb|125px|伊藤博文]]
:明治になって、[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#四民平等|身分制度がなくなり]]<ref name="華族">実際は、公家や大名、明治政府に大きな貢献のあった人たちについては、{{ruby|公爵|こうしゃく}}・{{ruby|侯|こう}}爵・{{ruby|伯|はく}}爵・{{ruby|子|し}}爵・{{ruby|男|だん}}爵といった貴族の爵位が与えられ、その一族は「{{ruby|華族|かぞく}}」と呼ばれました。華族には、いくつかの特権が認められましたが、華族の数は比較的少ないうえ、江戸時代ほど極端に大きな差ではありませんでしたし、社会的な貢献をすることで、誰でも華族となる機会はありました。また、「士族」と「平民」の間で異なる取り扱いは一切ありませんでした。</ref>、人々は才覚や努力によって、どのような職業に就くこともできるようになりました。人々は、学業をはじめとしたさまざまな努力をして、いろいろな分野で活躍するようになりました。
:明治政府は、さまざまな改革を強引に進めたため民衆と対立することも少なくありませんでした。このような民衆の不満は、[[#士族の反乱|士族の反乱]]の後は、こうした近代思想を取り入れて政治参加を求める{{ruby|自由民権|じゆうみんけん}}運動につながります。自由民権運動は、憲法の制定と、民衆が政治に参加できる選挙を通じた国会の開設をもとめるようになります。自由民権運動は、征韓論で下野した'''[[小学校社会/6学年/歴史編/人物事典#板垣退助|{{ruby|板垣退助|いたがきたいすけ}}]]'''と1881年(明治14年)に'''[[小学校社会/6学年/歴史編/人物事典#伊藤博文|{{ruby|伊藤博文|いとうひろぶみ}}]]'''らと対立して政府を離れた'''[[小学校社会/6学年/歴史編/人物事典#大隈重信|{{ruby|大隈重信|おおくましげのぶ}}]]'''らに主導されました。
:大隈や板垣が主導する自由民権運動の主張は、国民の自由と権利を保障する憲法の制定とそれに基づく国民の選挙による議会(民選議会)の開設及び議会による政府の統制でした。伊藤博文ら明治政府を主導する人たちは、自由民権運動の考えをそのまま受け入れると、政策を政府が思うとおりに進めることができず、富国強兵などの改革政策に差しさわりがあると考え、この運動を弾圧しました。一方で各地の有力者や、新たな産業の成功者が登場してきており、明治政府はこれらの人々の支持を受けたいと思っていました。また、欧米諸国から見ると、民選議会が政治を進めない国は遅れているとの意識があり、不平等条約改正にあたっても説得させることができない理由の一つとなっていました。
:1881年(明治14年)明治政府は、明治天皇名で「国会開設の勅諭」を下し、1889年(明治22年)に国会を開設することを国民に約束しました。これを受けて、自由民権運動の活動家は政党を結成し、同年には自由党が板垣退助を中心として、翌1882年(明治15年)立憲改進党が大隈重信らによって結成されました。
:一方、伊藤は、1882年(明治15年)、憲法制定・国会開設の模範を研究するためためにヨーロッパを視察しました。そこで、伊藤は議会が発達したイギリスや、人権思想が進んでいたフランスではなく、ドイツ帝国の憲法を模範にすることとしました<ref>この頃のドイツは、日本が藩に分かれていたのと同様に、多くの王国・貴族領に分かれていたものを、各地で統一の要望が上がり、その中で有力となったプロイセン国王を皇帝とするドイツ帝国が成立していました。ドイツ帝国は、イギリスやフランスよりも、皇帝(それを受けた行政機関)の権限が強く、議会の力はおさえられていました。ドイツは、英仏に比べ工業化などが遅れていたために、それを推進するために、強い行政の力が必要であったためです。また、各個人の人権についても制限がありました。伊藤が、英仏ではなく、ドイツを国の形の模範としたのは、このように、日本と状況が似ていたためです。</ref>。帰国した伊藤は憲法制定の準備をはじめ、1885年(明治18年)に内閣総理大臣を長とする'''内閣制度'''が創設され、1889年(明治22年)に'''大日本帝国憲法'''(明治憲法<span id="明治憲法"/>)が発布されました。翌1890年(明治23年)7月1日憲法の精神に基づいて<ref>明治憲法が、実際に有効となる(施行される)のは、1890年(明治23年)11月29日なので、まだ、憲法の下の選挙・国会の招集ではありませんでした。</ref>、初めて総選挙が行われ、11月25日'''帝国議会'''(国会)が召集されました。
:明治憲法は以下のことを定めています。
:#天皇は、日本の統治者とされます。
:#国会は、天皇に「協賛」して法律や予算を定める機関とされます。
:#*法律や予算を決めるのは天皇であって、国会は、その補助をしているに過ぎないという考えを表しています。
:#*緊急と認められる時には、天皇<ref>実際は、行政府である政府の仕事です。</ref>は国会の議決によらず、法律に代わる勅令を出すことができました。
:#国会は、貴族院と衆議院により成り立ち、衆議院は選挙によって選ばれた議員により構成され、貴族院は皇族・華族<ref name="華族"/>及び勅命<ref>天皇の命令。実際は、その時の行政府による指名。</ref>で任名された議員により構成されます<ref>ただし、このような議会の成り立ちは、世界的に見ても珍しいものではありませんでした。明治憲法の元になったドイツ帝国の議会が貴族院と衆議院で成り立っていましたし、そもそも、議会政治の模範とされるイギリスも世襲貴族による「貴族院」と選挙で選ばれた議員による「庶民院」で構成されていて、現在もその伝統が残ります。このことで、身分で選ばれた議員による議会を「上院」、選挙で選ばれた議員による議会を「下院」という習慣ができました。アメリカ合衆国には独立当時から貴族制度はありませんでしたが、上院は各州の代表(元々は州議会が選出していましたが、現在は州民の選挙によります)、下院は州にかかわらず選挙で選ばれた議員による議会と、上院と下院で性質を変えていたりします。時代が下るにつれ、選挙で選ばれた議員の決めることが優先されるという政治習慣(下院優先の原則)が有力になります。</ref>。
:#*衆議院の優位などの定めはなく、各議院で議決されなければ法律などは成立しませんでした。
:#*<span id="制限選挙"/>衆議院議員の選挙権は、憲法を定めた当時は、一定以上の税金を納めた者にのみ認められていました。
:#国務大臣は天皇を{{ruby|輔弼|ほひつ}}(助言し助ける)すると定められます。また、内閣総理大臣についての定めはありません。
:#*<span id="内閣総理大臣"/>内閣総理大臣は、天皇が指名する建前でしたが、実際には、元老といわれる人達<ref>元老には、最初は伊藤博文など維新の功臣が、後代には長期に首相を務めた者がなりました。</ref>が協議したり、後には首相経験者などで構成する重臣会議で決議して天皇に{{ruby|推薦|すいせん}}して決まるものでした。
:#軍隊(陸海軍)は天皇が直接まとめひきいるとされました。また、国民には徴兵に応じる義務がありました。
:#*軍隊は、国会や内閣の命令を聞く必要がないと解釈されるようになります。
:#様々な国民の人権が認められましたが、それは、法律の範囲内で認められるものとされました。
:#*例えば、女性には選挙権は認められることはありませんでした。また、民法で家族や相続は家制度によったため、女性は不利な取り扱いを受けました。
:#*後に制定される治安維持法は、政治思想(特に社会主義思想・共産主義思想)を取り締まる法律でした。
=== 日清戦争と日露戦争 ===
==== 日清戦争 ====
[[File:《马关条约》签字时的情景.jpg|thumb|right|200px|none|下関条約の調印の様子。 向かって左に着席するのが日本の伊藤全権、右が清国の李全権]]
: 急激な近代化に成功した日本は、国内で拡大した産業の新たな市場を求め大陸に進出しようとします<ref>「急激な近代化に成功した日本」と書きましたが、これは、[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#世界の変化1 - 産業革命|前の章の『産業革命』の節]]に書いた「欧米各国は、産業革命で経済力が大きくなりましたが、さらにそれを大きくするため、国内で生産する工業製品の{{ruby|市場|しじょう}}と原材料となる農産物や鉱物資源を欧米諸国の外に求めるようになりました。」の部分を日本に当てはめたものです。しかし、この頃の日本の工業力はまだ近代化が始まったばかりで、外国に市場を求めるまで成長していません。</ref>。朝鮮は中国の帝国'''{{ruby|清|しん}}'''の属国でしたが、その影響で近代化が進んでおらず、朝鮮国内の近代化を求める人々は日本と協力して清の影響から逃れようとしました。朝鮮国内の清に従う保守派と改革派の争いに日本と清はそれぞれ兵を出すなどして緊張が高まり、1894年(明治27年)朝鮮半島西岸における両国海軍の接触をきっかけに'''日清戦争'''が始まりました。日本は清の北洋海軍を壊滅させ、黄海沿岸の軍事拠点を攻撃し、遼東半島を占領するなど戦いを有利に進め、翌1895年(明治28年)、'''[[小学校社会/6学年/歴史編/人物事典#陸奥宗光|{{ruby|陸奥宗光|むつむねみつ}}]]<span id="陸奥宗光"/>'''外務大臣と清の提督である{{ruby|李鴻章|りこうしょう}}が交渉し、以下の事項などを定めた'''下関条約'''が締結され講和が結ばれました(日本の勝利)。
:#清は、朝鮮の独立を認める。
:#清は、日本へ台湾と{{ruby|遼東|<small>りょうとう/リャオトン</small>}}半島<ref name="中国地名">中国の地名については、日本語の音読みで読む方法と現代の中国語に近い音で読む方法があります。後者は、「音読みだと日本人にしか通じない」と言う配慮から現代の中国語に近い音を当てると言う意図なのかもしれませんが、実際の発音とは異なっているので中国人にも伝わらないでしょう。ですから、ここでは、原則として音読みで音をふりますが、{{ruby|北京|ペキン}}、{{ruby|上海|シャンハイ}}のように現代中国語音に似せた言い方が一般的になったものもありますので、それらは、よく使う言い方をカタカナで表記します。</ref>を割譲する。
:#清は、日本へ賠償金2億両<ref>1両は銀37.3gで、当時の日本円に換算して約3億円。これは、政府の年間予算の約3倍にあたります。</ref>を支払う。
:#*日本は、この賠償金を資金として大規模な製鉄所を福岡県に作りました('''{{ruby|八幡|やはた}}製鉄所''')。
:清はそれまでも、イギリスやフランスと争って負けてはいましたが、欧米諸国は、それでも清国は世界最大の人口をかかえる巨大な国<ref>当時、3億人を超える程度の人口があったものとされています。</ref>であって、実力を発揮すれば欧米諸国であっても勝てるものではないと思われていた<ref>これを、「清国は『眠れる獅子』だ」という言い方をします。</ref>ので中国本土への進出はおさえられていましたが、近代化後間もない日本に敗れたため、欧米諸国は清国への進出を強め、中国大陸の多くの地域で欧米諸国の半植民地と言ってよい状態になりました。
<div style="margin:0 2em 0 4em">
{| class="wikitable" style="width:100%"
|'''【脱線 - 覚えなくてもいい話&考えてみましょう】日本は、どうして清国に勝てたのでしょう<small>
:戦争の勝敗の原因は、様々な要素があって、簡単に決めることができるものではありませんが、その時代の当事国の違いを比較することで、国の体制などの特徴を理解することができます。ここでは、なぜ、清国はやぶれ、日本は勝つことができたのかを考えてみましょう。
:戦争の勝敗を決める要素の第一は双方の国の規模です。大きな国の方が当然有利です。このころ、日本の人口はようやく4千万人程度のところ、清国の人口は3億人を超えていました。農業に適した広大な国土を有しており、近代化が遅れていたとは言え、税収などは日本よりもはるかに大きかったと考えられます。日清戦争の前も、世界最大級の軍艦をドイツから購入していたりします。相手の政権を倒すまでの全面戦争と言われる戦争であれば、日本は、勝つことは難しかったでしょう。
:一方で、清国は皇帝の軍隊は{{ruby|八旗|はっき}}・{{ruby|緑営|りょくえい}}と言われる17世紀の軍隊のままで、これは、日本の武士同様将兵が生まれながらの家柄で決まっている軍隊でしたが、[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#アヘン戦争|アヘン戦争]]以後の近代的戦争や民衆の反乱<ref>銃器などを欧米の商人から買っていました。</ref>では対応できなくなっていました。そこで、地方に派遣された高官は地元の有力者に呼びかけ、その地方の税を流用するなどして、地元の若者を集め、私的に軍隊を組織していました。一種の義勇兵ですが、実際は金を払って集めた{{ruby|傭兵|ようへい}}も少なくなかった言われています。
:また、清国は皇帝が独裁する事が建前であったため、外交と軍事がばらばらの動きをし、軍事も統一的な動きはできていませんでした。
:日本の場合、中央政府が全国民から国の制度として兵を集め、政府の予算で設備をそろえ、組織だった訓練を実施した軍隊を有していました。また、「天皇の軍隊」「日本国の軍隊」としての『国民』意識も高く、これが、士気につながりました。
:このような違いから、黄海およびその沿岸での戦闘という局地的な戦争では、国の規模の違いにかかわらず勝つことができたということです。
</small>
|}</div>
==== 日露戦争 ====
[[画像:Location-of-Liaodong-Peninsula.png|thumb|150px|left|遼東半島]]
[[ファイル:Kisaburō Ohara, Europe and Asia Octopus Map, 1904 Cornell CUL PJM 1145 01.jpg|thumb|300px|right|1904年当時、日本人がロシアにもったイメージを伝える風刺地図。]]
:下関条約で、日本は、台湾などとともに中国本土の遼東半島の割譲を受けましたが、ロシア、ドイツ、フランスが反対し('''{{ruby|三国干渉|さんごくかんしょう}}'''<ref>「干渉」とは、「他のものの動きに影響を与える」という元々の意味から、このような場合、「他国の政治に口を出す」という意味で使われています。</ref>)、遼東半島の割譲は取りやめとなりました。ところが、その遼東半島にはロシアが進出し、{{ruby|大連|だいれん}}、{{ruby|旅順|りょじゅん}}<ref name="中国地名"/>といった都市を建設し始めました。
:ロシアは、ユーラシア大陸を横断する鉄道('''シベリア鉄道''')を建築し、ヨーロッパとアジアの間の物流をおさえようとしていました<ref>日本からイギリスやフランスまで、船ならば45日〜50日かかったところを、シベリア鉄道を使えば15日程度で移動できました。</ref>。シベリア鉄道は、もともと、ロシア領内をウラジオストックまでのものですが、ロシアは遼東半島支配に伴って、大連まで{{ruby|東清|とうしん}}鉄道を建設し、その途中である{{ruby|満州|まんしゅう}}地域<ref>現在は、中国東北部と呼ばれる地域です。もともと、「満州(満洲)」とは清王朝をおこした民族(女真族)の名前で地名ではありませんが、「満洲族が起こった土地」と言うことで通称として用いられるようになりました。このころから、1945年頃まで、満州は日本にとって歴史上重要な土地となります。</ref>を実質的に植民地とするなど支配を強めます。そして、満州に接する朝鮮(日清戦争後、{{ruby|大韓帝国|だいかんていこく}})の政治にも介入するなどしはじめました<ref>ロシア進出の背景には、大韓帝国の王室のメンバーや{{ruby|両班|ヤンバン}}と呼ばれる高級官僚らが、朝鮮の政治・経済に段々影響を強めてくる日本を警戒して、それに対抗するため、ロシアと通じていたということもあります。</ref>。
:日本は、ロシアの動きに対して警戒しました。ロシアが満州地域でやっていることは、他のヨーロッパ諸国がアジアやアフリカでやっていて、日清戦争後に中国本土で進められている植民地化であって、そのままでは、満州地域だけでなく、朝鮮半島も、さらには日本までもが、植民地となってしまうのではないかと考えました<ref>これは、大げさな話ではなく、アフリカの植民地化はこの時期に進み、19世紀末には独立国は、エジプト周辺、エチオピア、リベリアだけになっていましたし、アジアも1887年にフランスがベトナムを植民地にするなどして、独立を保っていたのはシャム王国(現在のタイ王国)くらいになっていました。</ref>。
:日本政府では、伊藤博文に代表される日露の衝突を外交努力などで避けるべきとするグループがあった一方で、陸軍に対して大きな影響を持った'''[[小学校社会/6学年/歴史編/人物事典#山県有朋|{{ruby|山県|やまがた}}(山縣){{ruby|有朋|ありとも}}]]'''や首相の{{ruby|桂太郎|かつらたろう}}、外交官出身の外務大臣'''[[小学校社会/6学年/歴史編/人物事典#小村寿太郎|{{ruby|小村寿太郎|こむらじゅたろう}}]]<span id="小村寿太郎"/>'''らは、戦争は避けられないので、それに向けての準備をするという態度に出ました。日本国内では、戦争に向け軍艦を整備したり新たな兵器の開発を行う一方で、ロシアの中央アジアからインドへの南下などを警戒するイギリスと同盟を結び、ロシアとの戦争に備えました。
[[file:Nichirojp.png|thumb|300px|日露戦争の経過]]
:1904年(明治37年)日本とロシアは開戦し('''日露戦争''')、日本とロシアは、ロシアが植民地としていた遼東半島や満州で戦いました。ロシアは、モスクワなどから遠い極東に兵や兵器・軍馬・食料などを送るには、シベリア鉄道に頼るしかないので、すぐに戦場で攻撃の体制を作ることはできません。一方で、日本も、兵などを送るには日本海を渡らなければならないので、この地域の{{ruby|制海|せいかい}}権<ref>ある地域を自由に航行できるということ。</ref>を握る必要がありました。海軍はロシアの太平洋側の主力艦隊である旅順艦隊をせめ有利な立場になりますが、旅順艦隊は、援軍である世界最大級の艦隊バルチック艦隊<ref>「バルト海」で行動する艦隊なのでバルチック艦隊といいます。</ref>が到着するまで、旅順港に待機することになりました。日本陸軍は遼東半島南端から東進鉄道沿いに北上、朝鮮国境からの軍とあわせ、ロシア軍を満州地域北部までおしもどしました。また、旅順に引き込んだ艦隊がバルチック艦隊と合流すると制海権が危うくなるので、'''{{ruby|乃木希典|のぎまれすけ}}'''<ref>死後、乃木神社にまつられます。乃木坂などの地名にも残っています。</ref>が率いる陸軍の軍団が、要塞となった旅順を攻撃します。この旅順を囲む戦いは、日露戦争の中でも多くの日本兵の犠牲を出しましたが1905年(明治38年)1月に降伏し、バルチック艦隊のみを迎えうつことになりました。そうして、5月に'''[[小学校社会/6学年/歴史編/人物事典#東郷平八郎|{{ruby|東郷平八郎|とうごうへいはちろう}}]]'''がひきいる日本海軍は日本海海戦でバルチック艦隊をやぶり、日本海の制海権を安定したものにしました。
:日本は、戦争を有利に進めたとことで、アメリカ合衆国大統領'''セオドア・ルーズベルト'''に講和の仲介を依頼し、日本からは'''[[#小村寿太郎|小村寿太郎]]'''が、ロシアからは'''ウィッテ'''(前蔵相、のちに初代首相)が、米国のポーツマスに出向き、講和会議が開かれました。1905年9月5日、以下の事項を決めた条約('''ポーツマス条約''')が結ばれ、ロシアは中国から撤退し、日露戦争は日本の勝利で終わりました。
:# ロシアは日本の朝鮮半島における優越権を認める。
:# 日露両国の軍隊は、鉄道警備隊を除いて満州から撤退する。
:# ロシアは樺太の北緯50度以南の領土を永久に日本へ譲渡する。
:# ロシアは東清鉄道の内、旅順-長春間の南満洲支線と、付属地の炭鉱の{{ruby|租借|そしゃく}}<ref>土地などを、借り受けるという意味ですが、実質的な支配が行われ、「租借地」というのは、「植民地」とほぼ同義語になります。</ref>権を日本へ譲渡する。
:#*この路線は、「南満州鉄道」と改称され、日本の満洲進出の基礎となります。
:# ロシアは関東州(旅順・大連を含む遼東半島南端部)の租借権を日本へ譲渡する。
:# ロシアは沿海州沿岸の漁業権を日本人に与える。
:ポーツマス条約では下関条約と異なり賠償金の支払いはありませんでした。一部の日本国民はこれを不満に思って、暴動をおこすものもありました。しかし、国民には知らされていませんでしたが、戦争を有利に進めていたとはいえ、これ以上は財政上ほとんど無理な状態になっていて、すぐにでも戦争をやめなければならない状態になっていました。ロシアはそれを見越して、敗戦国でありながら、比較的有利な条件で講和条約を結んだといえます。
:しかし、この結果、満州や朝鮮半島に対するロシアの脅威は去りましたので、日本は、この地域への進出を高めます。特に、満州は石炭や鉄鉱石の地下資源が豊かな地域であったため鉱山開発を盛んに行いました。
:韓国については、政治的な不安定を理由に日本の属国化が進められ、1905年12月には統監府が設置され、伊藤博文が初代統監に就任しました。
:1909年 (明治42年)、伊藤博文はロシアとの外交交渉のため満州のハルビンに出向きましたが、そこで、朝鮮民族主義者に暗殺されます。それまで、韓国に対しては朝鮮民族に対し強硬的に望む人たちと、穏健に進めるべきという人たち(伊藤博文もその意見でした)が対立していたのですが、伊藤博文が暗殺されたことで、強硬派の勢いを増し、1910年(明治43年)8月に、日本は大韓帝国を併合しました('''{{ruby|韓国併合|かんこくへいごう}}''')。
:<span id="辛亥革命"/>日露戦争は、日本とロシアの戦争でしたが、その戦いは清国の領土でなされました。清国は、もはやそれを止める力を失っていました。中国の人々は、外国に国土を侵される不安が高まり、中国の人々が政治参加をする国をつくるため、1911年{{ruby|孫文|そんぶん}}が主導者となって革命を起こしました('''{{ruby|辛亥革命|しんがいかくめい}}''')。翌1912年清王朝は滅ぼされ、アジアにおいて史上初の独立した共和制国家である{{ruby|中華民国|ちゅうかみんこく}}が誕生しました。
<div style="margin:0 2em 0 4em">
{| class="wikitable" style="width:100%"
|'''【脱線 - 覚えなくてもいい話】<span id="南下政策"/>ロシアの南下政策<small>
:ロシアは、ヨーロッパの国の中では最も東にあって、17世紀にシベリアを征服し太平洋に達する領土を持つ大きな国ではあったのですが、ヨーロッパ中心部から離れていたので産業革命などはおくれてつたわりました。また、国土の多くが北にあったため、冬にほとんどの港が凍結するなどして、通商などにも支障が出るため、南へ勢力を伸ばす政策をとっていました。これを、「『{{ruby|不凍港|ふとうこう}}』を求めての南下」と言ったりします。19世紀、{{ruby|黒海|こっかい}}を勢力におさめようと、1853年トルコ(オスマン帝国)の領土であったバルカン半島などで戦争(クリミヤ戦争<ref>ロシアは、バルカン半島を南下しようとしたのですが、イギリス・フランスの参戦により押し戻され、クリミア半島が主要な戦場となりました。クリミヤ半島は、現在(2022年4月)、ロシアの侵攻で話題になっているウクライナの黒海地域です。</ref>)を起こしましたが、トルコをイギリスやフランスが支援し、この戦争ではロシアは敗北します<ref>クリミア戦争で、戦傷者の救護を組織的に行い、看護師による近代看護を確立したのが、フローレンス・'''ナイチンゲール'''です。</ref>。その後のバルカン半島の各民族の独立運動に合わせ、1877年オスマン帝国と戦争(露土戦争)をし、これに勝利しバルカン半島を経由したロシアの南下路が開けます。しかし、軍事的な勝利を収めたロシアの勢力拡大に対して欧州各国が警戒感が広がったため、ドイツ帝国の首相ビスマルクが主導し、1878年ベルリン会議を開き、ロシアの南下政策を止め、ロシアはバルカン半島方面の南下を一旦断念します。
:そこで、ロシアは、ヨーロッパ方面から世界へ出ることをあきらめ、東側のシベリアを経由して中央アジアや太平洋への進出をもくろみます。その結果のひとつが、三国干渉及びそれに続く遼東半島への進出です。
:しかし、日露戦争に敗れたため、ロシアは、ふたたび西へ目を向けます。そこで、バルカン半島から東に勢力を伸ばそうとしていたドイツとぶつかります。これが、第一次世界大戦の原因の一つとなります。
</small>
|}</div>
<div style="margin:0 2em 0 4em">
{| class="wikitable" style="width:100%"
|'''【脱線 - 覚えなくてもいい話&考えてみましょう】日本は、どうしてロシアに勝てたのでしょう<small>
:ここでは、なぜ、ロシアはやぶれ、日本は勝つことができたのかを考えてみましょう。
:双方の国の規模ですが、日本とロシアでは、人口で3倍、国家予算で10倍、常備軍で5倍という、大きな差がありました。また、清国と違い、ロシアの軍隊はロシア皇帝の下に組織された近代的な軍隊でした。実際、戦没者はロシアが81千人程度のところ、日本は88千人と日本の方が被害が大きかったりしています<ref>当時は、戦場の衛生環境などが悪く、病気になって亡くなる兵士も少なくありませんでした。日露とも、戦没者の1/4が病没者で。特に日本の病没の原因としては、ビタミンB欠乏症の「{{ruby|脚気|かっけ}}」が目立っていて、これは、日本陸軍の医療関係者が、当時新興の栄養学を軽視したためとも言われています。この医療関係者には、小説家の森鴎外もいました。</ref>。
:このように、日本に大きな被害が出た戦争であっても、ロシアが強気に出られなかったのは、サンクトペテルブルクやモスクワなどがある本拠地であるヨーロッパから、鉄道で10日以上かかる遠隔の地で兵隊を送ろうとしても、1日に数千人程度が限界だったからでしょう<ref>戦争において装備に大きな差がなければ、数の違いは大きく影響します。</ref>。ロシアにとっては、バルチック艦隊が日本海の制海権をにぎって、日本が大陸に兵隊や物資を送れなくすることで逆転をもくろんだのですが、日本海海戦でその希望もなくなり、ロシアは戦争の継続をあきらめたのだと思われます。
:バルチック艦隊は強力な艦隊でしたが、日英同盟により、インドなどイギリス植民地への寄港<ref>当時の軍艦の動力は蒸気機関であっったため、石炭と真水を大量に積み込む必要がありました。</ref>が拒否されたため、大西洋から、アフリカの南を回ってインド洋経由で7ヶ月もの航海ののちの到着でした。また、ロシアは身分制が残っており、士官は貴族階級など上流階級の出身者が多く、それに対して、水兵などは農民出身の者や都市の労働者などが多く、航海での待遇の差もあり、航海中から対立も生じていました。
:この上流階級と庶民階級の対立は、海軍だけでなく、陸軍でも見られました。なにより、ロシア国内の一般的な生活でも見られたのです。いくら国の規模が大きいとはいえ、戦争は国民生活に商品不足・インフレーションの影響を与えます。もともと、民衆からの不満がみられ、革命運動もあったところ、日露戦争によるインフレーションと数々の戦いで敗戦したとの知らせで民衆の間に暴動が頻発し、1905年には革命と言っていい状態になっていました。このような国内の不安定さから、ロシア政府は講和を急ぐようになり、日本の勝利につながったといえます。
</small>
|}</div>
=== 条約改正と国際社会での地位の向上 ===
[[File:Chikamatsu Kiken buto no ryakuke.jpg|thumb|300px|鹿鳴館における舞踏会を描いた浮世絵]]
;不平等条約改正の歩み
:幕末に欧米各国と結ばれた通商条約(不平等条約)の改正は日本政府の悲願でした。
:明治政府は、文明開化が進んで欧米並みの文明国になったことを示すため、さまざまなアピールをします。たとえば、1883年(明治16年)に外務卿{{ruby|井上馨|いのうえかおる}}は、'''{{ruby|鹿鳴館|ろくめいかん}}'''という、外国からの重要な来訪者や外交官を接待するための社交場を建設し、舞踏会を開いたりしていました。鹿鳴館での舞踏会などには、政府高官の夫人や娘なども参加しましたが、当時はドレスなどの洋装、欧米風の応対のマナーやエチケット、また、ダンスなどは全く一般的ではなく、必死の訓練などがあったと言われています。しかし、このような取り組みは、欧米人には「{{ruby|滑稽|こっけい}}」と感じられたと言う記録も残っており、あまりうまくいきませんでした。
:一方で、政府は、まず[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#治外法権|治外法権]](領事裁判権)の撤廃のため、国内の法整備を進め、公正な裁判が行われることを諸外国に示そうとしました。領事裁判権の裁判は犯罪に関するものなので、法律に関するフランス人の[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#お雇い外国人|お雇い外国人]]ボアソナードが指導してフランスの法律をもとにして、1880年(明治13年)に犯罪とその刑罰に関する刑法<span id="刑法"/>と刑事手続と裁判を定めた治罪法<ref>後に、刑事訴訟法に改正されます。</ref>が制定され、1882年(明治15年)施行されました。1889年(明治22年)には、[[#明治憲法|明治憲法]]が発布され法制度が欧米並みに整理されたことが、国際的に示されました。外務大臣'''[[#陸奥宗光|陸奥宗光]]'''は、各国と粘り強く交渉し、まず、1897年(明治30年)イギリスとの間で治外法権を撤廃する条約を結び、日清戦争終結後の1899年(明治32年)すべての国との間で治外法権を撤廃しました。
:そして、日露戦争の勝利は、世界に驚きをもってむかえられ、国際的地位も上がったことをうけて、外務大臣'''[[#小村寿太郎|小村寿太郎]]'''が主導し、1911年(明治44年)関税自主権も回復しました。
<div style="margin:0 2em 0 4em">
{| class="wikitable" style="width:100%"
|'''【脱線 - 覚えなくてもいい話】大津事件<small>
:1891年(明治24年)、日本を訪問中のロシア帝国皇太子ニコライ(後の皇帝ニコライ2世)が、滋賀県大津市で警備中の警察官に突然サーベルで切りつけられケガを負うと言う事件がありました。
:驚いた日本政府は、すぐに明治天皇自身が見舞いに駆けつけるよう手配し、日本を離れる際も自身で見送りました。大国ロシアの皇太子に対して小国日本の国民しかも警察官が暗殺{{ruby|未遂|みすい}}<ref>殺そうとした相手が死ななかったことを言います。</ref>をおかしたということで、ロシアが攻めてくるかもしれない、そして、当時の日本ではロシアに勝てるはずがないということで、日本国内は、大騒ぎになりました。
:明治政府は、犯人を死刑に処してロシア政府に対して謝罪の意も示そうとしました。
:ところが、当時の[[#刑法|刑法]]では、殺人未遂の最高刑は無期{{ruby|徒刑|とけい}}<ref>現在の言い方では「無期{{ruby|懲役|ちょうえき}}」、一生、刑務所に入れられる刑です。</ref>で、死刑とすることはできません。そこで、政府は、天皇や皇室に暴行などを加え死傷させた場合に適用される{{ruby|大逆|たいぎゃく}}罪を適用するよう裁判所に要請しました。しかし、これは「法律に定められていること以外を罪としてはならない」という近代法の原則「{{ruby|罪刑|ざいけい}}{{ruby|法定|ほうてい}}主義」に反します。大審院院長<ref>現在の最高裁判所長官に相当します。</ref>{{ruby|児島惟謙|こじまいけん}}は、事件の裁判所に、法律に従って判決を下すよう指示し、その結果、死刑ではなく無期徒刑の判決となりました。
:このことは、ロシアとの外交関係を難しくさせるおそれがありましたが、欧米諸国に対しては、「日本は、法律を厳格に守る国である」ということが印象付けられ、条約改正に向けても信用を得ることができました。
</small>
|}</div>
;<span id="国際社会"/>国際社会での地位の向上
: 1912年(明治45年・大正元年)大正天皇が即位し、元号が「'''大正'''」となりました。
: 1914年(大正3年)にヨーロッパの国々を二分した'''[[小学校社会/6学年/歴史編/戦争への道と現代の民主国家日本の誕生-昭和から現在まで#全世界を巻き込む戦争 - 第一次世界大戦|第一次世界大戦]]'''が始まりました<ref>第一次世界大戦については[[小学校社会/6学年/歴史編/戦争への道と現代の民主国家日本の誕生-昭和から現在まで|次の章]]で詳しく説明します。</ref>。日本は、イギリスやフランスの属する協商国に参加し、敵対する同盟国の一つであるドイツが租借する中国の{{ruby|青島|チンタオ}}<ref name="中国地名"/>や南太平洋の島々を占領しました。1919年戦争は協商国の勝利に終わり、翌年、平和を維持するための'''国際連盟'''が設立、日本は英仏などとともに常任理事国の一つとなりました。
: 第一次世界大戦は、今までに見られなかったほどの大規模な戦争で、戦場が全国土に広がり多くの工場設備なども失われ、工業生産が止まってしまったりしました。しかし、主な戦場はヨーロッパで、日本への被害はほとんどなかったため、日本は、ヨーロッパの工業生産に代わって、綿糸や綿布といった繊維製品や化学肥料など、さまざまな工業製品を輸出しました。また、日本へのヨーロッパからの輸入が止まったため、それにかわる重工業などが起こるきっかけにもなり、国際取引においても機械など高度な工業製品を輸出できる国となりました。第一次世界大戦の影響で日本の経済は急速に成長しました。
;明治後期から大正にかけての人々の生活や文化と学問
:明治維新後、さまざまな[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#殖産興業|殖産興業]]の取り組みによって、経済的余裕ができ、国民生活は向上し、さまざまな近代文化の進展が見られました。また、欧米から伝わった工業的な製紙法と活版印刷は安価で大量の印刷を可能として、新聞や雑誌が広く普及します。これら新聞や出版業の発達したことと、[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#学校|学校制度]]が定着し教育水準が上がったことで、国民の政治参加の意識も高まりました。
:さらに、日清戦争・日露戦争といった戦争で、納税額が多いかどうか、つまり財産が多いかどうかにかかわらず、国民として平等に生命を犠牲にするということが意識され、納税額による選挙権の制限([[#制限選挙|制限選挙]])をやめて、成人であれば誰にでも選挙権が与えられる「普通選挙」を求めた社会運動('''普選運動''')がおこり、1925年(大正14年)すべての男性が選挙権を有する普通選挙法が成立しました。このような、民主化の動きを「'''大正デモクラシー'''」と言います。しかし、まだ女性には選挙権は認められていませんでした。
:<span id="政党政治"/>このように、国民の政治への関心が高まると、選挙で選ばれた国会議員による衆議院の発言力が強まり、[[#内閣総理大臣|内閣総理大臣なども衆議院の意向を受けて選び出されることもありました]]。しかし、一方で議会での議論においては、政党同士の争いもあって、無駄な議論がなされるように見えることもありました。また、政策に関しての、議員の{{ruby|汚職|おしょく}}なども発生するようになりました。
:[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#文明開化|文明開化]]を受けて、日本には西洋風の文化が広く普及し、明治20年(1887年)代以降になると、それを受けた独自の文化が育ってきました。
:新聞や出版業の発達は上で述べたとおり人々の政治への意識を高めたところですが、そこには、政治的な考えなどだけではなく、人々の娯楽としての小説なども掲載されるようになりました。明治も初めのうちは、歌舞伎の演目などを題材としたものが多かったのですが、1885年(明治18年)、{{ruby|坪内逍遥|つぼうちしょうよう}}は、『{{ruby|小説神髄|しょうせつしんずい}}』をあらわし、人々の普段の生活に近い題材をとりあげる、いわゆる近代文学を提唱しました。またその中で、話し言葉と書き言葉の間の大きな違いから、もっと平易で話し言葉に近い言葉を使うよう進められました。これを{{ruby|言文一致|げんぶんいっち}}運動といいます<ref>ただし、今でも話し言葉と書き言葉は同じものではありません。</ref>。このような動きのなかで、多くの近代文学というものが生まれました。その中には、1895年(明治28年)に『たけくらべ』を書いた{{ruby|樋口一葉|ひぐちいちよう}}のような女性もいました。その後、{{ruby|森鴎外|もりおうがい}}や{{ruby|夏目漱石|なつめそうせき}}があらわれ、近代文学が確立します。特に、夏目漱石が1905年(明治38年)に初めて書いた小説『{{ruby|吾輩|わがはい}}は猫である』はユーモアに富んだ内容と落語にヒントを得たとされる平易な語り口調で広く普及し、日本語の書き言葉の元になったとも言われています。
:美術の分野では、写実的な西洋絵画や彫刻が日本でも制作されるようになりました。政府は1887年(明治20年)、「東京美術学校<ref name="芸大">「東京美術学校」と「東京音楽学校」は、のちに合併し「東京{{ruby|藝術|げいじゅつ}}大学」となります。</ref>」を設立し、西洋絵画の製作者や指導者を育てました。
:また、音楽の分野でも西洋音楽の受け入れが進み、1890年(明治23年)、演奏家・作曲家や指導者を育てる「東京音楽学校<ref name="芸大"/>」が開校しました。
:学問の分野では、[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代#学校|大学教育]]が定着し、日本の科学技術の水準も世界的なものになってきました。物理学では原子のモデルを提唱した{{ruby|長岡半太郎|ながおかはんたろう}}、数学の分野では{{ruby|高木貞治|たかぎていじ}}といった世界的に評価される研究者も登場するようになりました。
:特に、人々の生活に密着した医学の分野では、世界的に進みつつあった細菌学の分野で多くの成果が見られ、破傷風の治療法の研究やペスト菌の発見をおこなった'''[[小学校社会/6学年/歴史編/人物事典#北里柴三郎|{{ruby|北里柴三郎|きたざとしばさぶろう}}]]'''、{{ruby|赤痢|せきり}}菌を発見した{{ruby|志賀潔|しがきよし}}、黄熱病や梅毒の研究で知られ、ノーベル生理学・医学賞の授賞候補ともなった'''[[小学校社会/6学年/歴史編/人物事典#野口英世|{{ruby|野口英世|のぐちひでよ}}]]'''のように国際的な研究者がでてくるようになりました。
<div style="margin:0 2em 0 4em">
{| class="wikitable" style="width:100%"
|[[ファイル:Noguchi Hideyo.jpg|thumb|120px|right]]
'''【脱線 - 覚えなくてもいい話】<span id="野口英世"/>野口英世<small>
:本文に書いたとおり、野口英世は、国際的に活躍した細菌学者で、現在、その肖像が1000円札に使われている人です。子供の頃から大変苦労して勉強して、多くの業績を残した人で、皆さんの中で、野口英世の伝記を読んだことのある人も少なくないでしょう。ここでは、野口英世の生涯について簡単に紹介して、なぜ彼が偉人とされているかをお話ししたいと思います。
:1876年(明治9年)、英世<ref>元の名は「清作」で「英世」は22歳になって改名したものですが、ここでは、「英世」で統一します。</ref>は福島県耶麻郡三ッ和村(現:耶麻郡猪苗代町)に生まれます。貧しいというほどではありませんが、決して余裕のある家の生まれではありませんでした。英世は1歳の時に{{ruby|囲炉裏|いろり}}に落ち、左手に大{{ruby|火傷|やけど}}を負います。ただれた皮膚で指がくっついて開かなくなるというひどいものでした。英世は、学校に上がるようになると、このことでいじめられました。しかし、英世の学校の成績はとても素晴らしいものでした。英世の家計では、上級の学校に出すのは難しく、普通は小学校を出て働きに出るとことだったのですが、これを惜しんだ教師や地域の人がお金を出し合って、上の学校へ進ませました。また、火傷あとが不便であろうと、やはりお金を出し合って、まだ珍しかった西洋医術による手術を受けさせ、左手を使えるようにしました。英世はこの手術の成功に感激したことがきっかけで医師を目指すこととなりました。
:1896年(明治29年)英世は上京し、医学を学びます。1900年(明治33年)米国に渡り、研究を始めます。そして、アメリカを拠点として基礎医学の分野で数々の業績をあげ世界的な名声を得て、何回かノーベル生理学・医学賞の候補者ともなりました。
:1918年(大正7年)以降は{{ruby|黄熱|おうねつ}}病の研究に打ち込み、黄熱病の流行地域である南アメリカ各国やアフリカに渡って研究を続けます。しかし、黄熱病の研究中に自身もその病にかかり、1928年(昭和3年)アフリカのイギリス植民地ゴールド・コースト(現:ガーナ共和国) アクラで亡くなります。
:野口英世が偉人とされるのは、
:*庶民の出身であるにもかかわらず、高い能力で医者・研究者の地位についた<ref>大学以上の高等教育を受けさせることは当時の庶民にはめったにないことでした。また、英世の出身地会津は、戊辰戦争で官軍に抵抗し、政府などに関係者も少なく、薩長などの出身者より不利なところもありました。</ref>。
:*体に受けたハンディキャップにも負けず、努力して勉強した<ref>当時、家が貧しくても、軍隊に入って勉強するという方法もありましたが、英世の場合、このやり方は難しかったと考えられます。</ref>。
:*能力を世に出そうと、周囲の人が協力した。
:*日本ではなく、国外の研究所を拠点として国際的な活躍をした。
:というところにあると思います。野口英世の業績自体は、その後の医学の発展によって否定されたものも少なくはありませんが、目標に向けて努力する姿には見習うものがあると思います。
</small>
|}</div>
:日本の経済力が大きくなることにともなって、人々の暮らしもだんだん豊かなものになっていきましたが、この時期に、大きな災害に見舞われてもいます。
:まず、<span id="スペインかぜ"/>1918年(大正7年)から1920年(大正9年)にかけて世界中で流行した'''スペインかぜ'''といわれるインフルエンザの大流行です。当時は第一次世界大戦の交戦中であったため、軍人を中心に広く行き来し世界中で流行しました。全世界で30%にあたる5億人が感染し、少なくとも1700万人の死者がでたものと推定されています。日本においてもこの3年間で約40万人程度の死者が出ました<ref>最近のコロナ禍で、2020年から2022年7月現在の死者の累計数が約3万人であることと比較してみてください。</ref>。
:もう一つは、<span id="関東大震災"/>1923年(大正12年)9月1日、南関東一円を襲った'''関東大震災'''です。マグニチュード7.9〜8.3と推定される大地震<ref>1000年に1度と言われる2011年東日本大震災のマグニチュードは9.0で特別ですが、1995年阪神淡路大地震のマグニチュードは7.3くらいです。</ref>で、約1万人が倒れた建物の下敷きになって亡くなり、約9万人が、地震ののちに発生した火災で亡くなりました。
== 脚注 ==
以下は学習の参考ですので覚える必要はありません。<small>
<references/></small>
----
{{前後
|type=章
|[[小学校社会/6学年/歴史編]]
|[[小学校社会/6学年/歴史編/歴史の流れをつかもう|日本の歴史の流れ]]
|[[小学校社会/6学年/歴史編/明治維新と近代国家日本の成立-幕末・明治時代|明治維新と近代国家日本の成立-幕末・明治時代]]
|[[小学校社会/6学年/歴史編/戦争への道と現代の民主国家日本の誕生-昭和から現在まで|戦争への道と現代の民主国家日本の誕生-昭和から現在まで]]
}}
[[Category:社会|しようかつこうしやかい6]]
[[Category:小学校社会|6ねん]]
[[Category:小学校社会 歴史|#12]]
p9kh9qluyc4ee9f7n245f9pq33pax5w
Wikibooks:投稿ブロック依頼/Honooo
4
34120
205684
199077
2022-07-22T16:17:44Z
Honooo
14373
/* {{User2|Honooo}} */ 段はもう一段深くした方がいいようですね…
wikitext
text/x-wiki
==== {{User2|Honooo}} ====
===== 依頼理由 =====
この人物は、議論ページなどで多くの嘘をついている。詐欺師の疑いがあると感じます。
当初、[[検定外高校生物]]で、彼は自身を生物系の専門家だと述べていた。しかし、彼のその後の編集を見ても、まったく生物学や理系の専門的な記事は無い。
また、基本的に彼はなぜか専門外のはずの美術やゲームプログラミングの記事に、断定的に口を出すのだが、その割には出典を1冊も挙げられていない。このブロック依頼の時点(2022年3月1日)で、彼は満足に出典を挙げていない。
一方、彼が文句をつける利用者: すじにくシチュー は、主観的な記述も多いが、いちおうは出典をあげられている(このブロック依頼を提出している人物です)。
* 参考
:[[高等学校美術I]]
:[[ゲームプログラミング]]
他にも、彼の行動には、不審な点が多くあります。
たとえば談話室の投稿で、編集者 Honooo によって下記のような投稿がされている。(出典 [https://ja.wikibooks.org/w/index.php?title=Wikibooks:%E8%AB%87%E8%A9%B1%E5%AE%A4&oldid=194751 2022年2月28日 (月) 12:38時点における版] )
:引用
<pre>
== Webで起きていること ==
あのー私はこういうことについてはほとんど知らないし,情報も持っていないのですが,でもツイッターなんかの発言では時々見るんだけど,なんか,Web上ではあらゆるところで,特定の政治立場や経済利益を手に入れるために,お金をもらって,その勢力に都合いい記述を書きまくっている人物がいるようですね。私自身は完全に趣味で,遊びで,もちろんこういうサイトですからそれなりに公益や学問的な確かさを考慮して書きますが,そうじゃない,馬鹿ばかしい邪念と金のために書いている奴がかなりいるらしいって聞いたことがあるけど…。その辺どうでしょうかね?皆さんはどう思います?--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年1月7日 (金) 17:30 (UTC)
</pre>
:以上、引用.
なんだか陰謀論くさいことを言っています。
私は彼を、自己啓発セミナーかカルト宗教か何かの類の人間だと疑っています。
そう考えると、理系の知識がとぼしいのに理系を名乗る点や、美術(それも主にアニメやマンガなど娯楽関係)のことばかり主張しているのも合点が行きます。
引用文では「学問的な確かさを考慮して書きますが,」とあるが、しかし実際の彼の投稿では、出典をあげられていないものが大半です。彼は談話室の投稿を通じて、自身の活動履歴を捏造しています。
彼は詐欺をしようとしています。ブロックするべきです。
『[[トーク:ゲームプログラミング/バランス調整]]』でも、彼の発言は奇妙です。
他の編集者から、下記のように指摘されています。[https://ja.wikibooks.org/w/index.php?title=%E3%83%88%E3%83%BC%E3%82%AF:%E3%82%B2%E3%83%BC%E3%83%A0%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0/%E3%83%90%E3%83%A9%E3%83%B3%E3%82%B9%E8%AA%BF%E6%95%B4&oldid=194705 トーク:ゲームプログラミング/バランス調整 ]
<pre>
本文に対して不満があるならば、本文自体を修正することをお勧めします。そこで編集合戦等が起こった時にはじめて(又は、編集合戦が起こらないように編集意図を明確にするため)、「トーク」欄を利用してください。--Tomzo (トーク) 2021年12月14日 (火) 09:51 (UTC)
</pre>
<pre>
書けないものに対する評価は難しいと思います。その表現がおかしいと思えば、穏当な表現に直すのは可能ですし、又、読み手として内容の正否が不明であれば、「投稿者の主観でなく、関係する者の一般的な考えであることを求める(いわゆる、『要出典』)」などの対応が可能だと思います。--Mtodo (トーク) 2021年12月14日 (火) 10:55 (UTC)
</pre>
<pre>
記事本文がご自身の主義主張と対立する内容であることは、相手に不作法を働いて良い理由にはなりません。
本文に異議を唱えるのは自由ですが、礼節をもって意見交換はなされるべきです。
Wikiのエチケットを遵守した上でのご利用をお願いします。 --Jqop (トーク) 2021年12月14日 (火) 19:10 (UTC)
</pre>
また、現在は削除されている指摘ですが(Honooo の議論と一緒にされたので)、下記のようなHonooo氏を批判する指摘があります。[https://ja.wikibooks.org/w/index.php?title=%E3%83%88%E3%83%BC%E3%82%AF:%E3%82%B2%E3%83%BC%E3%83%A0%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0/%E3%83%90%E3%83%A9%E3%83%B3%E3%82%B9%E8%AA%BF%E6%95%B4&oldid=193046 トーク:ゲームプログラミング/バランス調整 2022年1月30日 (日) 07:52時点における版 ]
<pre>
少し目に余りましたので以下指摘させていただきます。
ここはTwitterや某匿名掲示板ではありません。
そしてあなたの個人的な鬱憤を晴らす場でもありません。
ここ数日は特に連投が少々過ぎるようです。
適切な使用を心がけて下さい。
Chziob47368 (トーク) 2022年1月23日 (日) 04:11 (UTC)
</pre>
また、要約欄ですが、他編集者による指摘(たとえば 2022年2月28日 (月) 12:22 Mauzie683794 )で、Honooo の編集が、
<pre>
投稿者のプライベートな日記や一人語りで占められ、本文の議論と明らかに乖離した内容。 暴力的な言い回しや性的揶揄も確認。いずれも本文と関連がなく常習的荒らし行為。
</pre>
といわれています。
にもかかわらず、彼 Honooo と思われるIPの行動は
<pre>
2022年2月28日 (月) 12:23 2404:7a86:8800:1c00:20fd:f14f:ff87:a005
Mauzie683794 (トーク) による版 194740 を取り消し。だからね、本人以外はry。
</pre>
です。
[[トーク:高等学校国語総合/土佐日記]]では、高校国語となんの関係もない感想の垂れ流しです。[https://ja.wikibooks.org/w/index.php?title=%E3%83%88%E3%83%BC%E3%82%AF:%E9%AB%98%E7%AD%89%E5%AD%A6%E6%A0%A1%E5%9B%BD%E8%AA%9E%E7%B7%8F%E5%90%88/%E5%9C%9F%E4%BD%90%E6%97%A5%E8%A8%98&oldid=194759 2022年2月28日 (月) 13:24時点における版 ]
<pre>
もがなって,タモリさんのハナモゲラに共通するとこない? 無いか^^;;;--Honooo (トーク) 2022年2月28日 (月) 13:24 (UTC)
</pre>
--[[利用者:すじにくシチュー|すじにくシチュー]] ([[利用者・トーク:すじにくシチュー|トーク]])
:いやいやすじにくさん,明らかにいくつか事実誤認があるよ。まずそのIP は俺じゃあないよ。誰かは大体想像つくけど,少なくとも現実世界の知り合いではない。あと宗教云々も,確かに宗教には興味あるけど,変なはまり方はしないように気を付けてる。あと理学部生物の学士というのも事実。逆に専門分野だから今更書きたくないだけだよ。仕事ではかかわってるしね。とにかく落ち着いてよ。どうしてあなたは絶対の正解にたどり着かないのかね?--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年2月28日 (月) 15:52 (UTC)
(すじにくシチューによる追記)編集者 Honooo には、下記のような疑惑もあります。固定リンク [https://ja.wikibooks.org/w/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85%E3%83%BB%E3%83%88%E3%83%BC%E3%82%AF:Mauzie683794&oldid=194959 『利用者・トーク:Mauzie683794』2022年3月2日 (水) 11:11時点の版] からの引用ですが、
<pre>
当該の投稿者の書き込みの中に「議論は議事録だから消せない」と言い放った直後にエヴァンゲリオンの話を展開していることがら、容易に削除できないwikiのルールを逆手にとって承認欲求の肥やしにしている節が見られます。なんらかの対処は講じるべきではあるかと考えます。
除去が通らないのでしたら、少なくとも上で指摘したマンガ、アニメ関係の落書きは削除がなされるべきでしょう。 Mauzie683794 (トーク) 2022年3月1日 (火) 10:57 (UTC)
</pre>
--[[利用者:すじにくシチュー|すじにくシチュー]] ([[利用者・トーク:すじにくシチュー|トーク]]) 2022年3月2日 (水) 11:29 (UTC)
:滅茶苦茶だよ,先輩^^;;;。単に話の流れでちょっと遊んでるだけだろ?^^;;;;;。承認欲求ならお前ら二人のほうが絶大絶倫だよ。ほんとこんな奴らと付き合わなきゃあならないなら,ブロックされた方がまし,楽かもね。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年3月2日 (水) 12:14 (UTC)
===== 依頼者のコメント =====
(すじにくシチューのコメント)wikibooksに限らずwiki姉妹プロジェクトは、出典主義です。なので、私としては、自信の書いた記事において、私が出典をあげてない記事を消されたり「要出典」などと上書きされるのは構いません。ですがHonoooは、出典を挙げたにもかかわらず、しかし彼はそれでも出典に当たらない、またはもし該当の出典が入手困難だとするなら代わりの信頼できる出典もしないまま、高圧的・断定的に上書き編集をします。私の記事だけでなく、私が上記ブロック依頼で紹介した他編集者からHonoooへの文句のあるページの本文でも、彼による同様の編集傾向が見られます。
記事が生まれたばかりなどの段階などの理由で、出典まだが乏しい段階でなら、著作方法のひとつとして満足な出典もないで持論を展開するのも一つの効率的な著作方法でしょう。ですが彼 Honooo は、記事に出典が集まりだしても、まったく自身からは別の出典も持ち寄らないまま、他人の編集を上書きします。これは大変にwikiの出典主義の品質を損なっていると考えます。
もし彼 Honooo が何か他編集者の編集に異論があるなら、その異論の根拠となる出典を書籍名などとともに具体的に出せばいいのです。お金がなくて書籍を購入できないとしても、近い分野のプロや企業などの公式ブログを参考にするとか、あるいは文献を図書館で借りるとか、色々な出典の方法がありますし、wikipediaでもそのような方法が取られている記事も多々あります。しかし彼はそういった努力を全くしません。--[[利用者:すじにくシチュー|すじにくシチュー]] ([[利用者・トーク:すじにくシチュー|トーク]]) 2022年3月2日 (水) 12:35 (UTC)
===== 被依頼者のコメント =====
:まあ少なくとも,あんたの努力はすべて自己満足だけど,そうねー,今回の問題は何らかの議論が必要かも。もうちょっと待ってくれ,どうするか対処考えてみる。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年3月2日 (水) 12:39 (UTC)
:まず第一に,別の場所でも書いたけど,ウィキメディアが求めているのは事実に対する出典だと思う。基本的にはウィキペでは意見は独自研究だから却下でしょ? もちろん誰かがこう考えてるというのはいいだろうけど,あんたの場合は誰かがこう考えてるからそれは正しいまで踏み込んでるように見えるな。なんだかんだであんたの意見が入ってるんだよ。だから俺が別の人の意見を出典にして反論することをあんたは望んでるんだろうけど,俺は基本的にあんたみたいな読書記憶人ではなく,思考思想人なのでね。その展開は無理だよ。じゃあ書くなっていうのは,あまりにも高圧的じゃあない?--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年3月2日 (水) 12:47 (UTC)
:そうね,じゃあまず今後はここの出典と独自研究に関する文章を少し時間かけて読んでみるよ。ただここではどちらもまだ草案段階だった?それとも一応決定していたかな?それも含めてね,今後少しずつは読んでいくよ。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年3月2日 (水) 12:55 (UTC)
:今ちょっと調べてみたけど,草案の出典明記しかなかったよ。だからって独自研究OKとは主張しないけど,どうする?どう考えたらいいの?--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年3月2日 (水) 13:13 (UTC)
:もうちょっと反論しておくかね。ただ本当はすじ肉的な人間には一切かかわりたくないんだけど、ちょっとこの場も膠着しているようだから…。そもそもWikipediaが出典主義なのは分かるけど、Wikibooksはほんとに出典主義なの?明文化されたページある?お前が集める出典は、お前みたいに下らん人間が喜ぶ馬鹿議論が書いた本ばかりだろ?Wikiの品質って言うけど、お前の馬鹿文なら、お前以外の歴史上のだれが上書きしたって、質は確実に高くなるよ。ほんとにWikiの品質高めたいなら、お前の意に染まない出典も集めて、その意見も記述して、中立的な文章を書けよ。仮にお前がここで、別名義で何か偉そうなことを多量に書いていたとして、お前ひとりの存在ですべてゼロ、マイナスだね。努力努力っていうけど、お前は努力なんて何一つしていないよ。欲望のままに本買って読んでここで書き散らしてるだけだろ?--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年3月4日 (金) 14:36 (UTC)
=====投票、コメント=====
*{{RFB|中立}} まず、Honoooさんには[[特別:差分/195111|こちら]]のような礼を失した発言が多数見受けられます。こうした態度がすじにくシチュー氏を苛立たせているのかもしれません。
ただ、当方はすじにくシチュー氏にも少なからず問題があると思います。まず被依頼者を「詐欺師」と表現していますが,これも適切とは言い難い発言です。お二方は少なからずヒートアップなさっているようですが、まずは[[Wikibooks:コメント依頼/すじにくシチュー]]で話し合ってみてはいかがでしょう。現状,見る方によっては「すじにくシチュー氏がブロック依頼を提出し,Honooo氏が報復依頼」という感想を抱かれるのではないでしょうか。また、すじにくシチュー氏は過去に二度「暴言または嫌がらせ」でブロックされています。すじにくシチュー氏も初心者ではないのですから,一度自己の行動を見直してみてはいかがでしょう。
以上の理由より,中立とさせていただきます。--{{Unsigned2|スタリオン箕浦|2022年5月8日(月)13:20(UTC)|[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]])}}
:いやいやスタリオンさん,貴方意外と事実認識がいい加減ですね…。まずブロック依頼に関しては,私が提出したあとにすじにく氏が提出したんですよ。それともそれをわかったうえで書いているんですかね…--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月8日 (日) 15:59 (UTC)
:(すじにくシチューによる、コメントへのコメント)
:* 「礼を失した発言が多数見受けられます。こうした態度がすじにくシチュー氏を苛立たせているのかもしれません。」
::↑いや、礼儀があれば許されるって問題じゃないと思うのですが。じゃあ例えば、あなたは暴力団が敬語を使ってきたら容認して要求にしたがうのか、というのと同じ問題ですよ。言葉遣いではなく、Honooo の行動の実態が問題だと言っている。
::出典をあげずに自己の意見の陳列ばかりをするのが問題だと、私は言おうとしている。なお、私の場合、自己の意見ではなく、商業の評論家の意見を書いているわけです。評論家の意見に対する、その評論家の問題点などとして気づいた意見を書く場合もあるかもしれませんが、しかし少なくとも、いきなり「私はこう思う。お前らもこう思え。」と書くような事は、少なくとも小中高の教科書本体の記事では、していないつもりです(あるとしたら、学習方法のページぐらい。これは編集当時に市販の書籍がなかったか、あるとしても極端に少ないので、普通の出典を集めづらいので。なので私だけでなく他編集者も、学習方法ページの編集では出典不足なことが多い。むしろ私は出典が多いほう。)。仮に私の不注意で出典不足のそういう記事があっても、私はできるだけ出典をつけているわけですから、じゃあその出典に他編集者が他の出典をつけて上書きすればいいだけです。出典のない Honooo の意見陳列とは違います。
:: あと、裏を返せば、もし他編集者が出典をきちんと挙げられて、編集者個人の意見の開陳極力抑えられるなら、多少の言動の荒さがあったとしても、私はその他編集者を容認する可能性すらあるかもしれません。なのに「地道に出典を探そう。市販の教科書を買って読もう」とする行動ではなく、議論での口先でやり過ごして要求を通そうという発想が、まさに詐欺師的な発想であり、私は好きじゃないですね。あ、この好き嫌いは私の好みですんで、内心の自由なので、文句を言われる筋合いはありません。
:* 「被依頼者を「詐欺師」と表現していますが,これも適切とは言い難い発言です。」
::↑なぜ言い難いのですか? 感想ではなく、「これこれこういう理由で、言い難い」という根拠を提示してほしいですね。それができないなら、単なる感想ですね。
::世間は、あなたの好みなんて知りません。あなたの内心を察する義務なんてありません。あなたは人気芸人じゃないし、私はあなたのファンでもないので、あなたの心中を察する義務はありません。
:* 「また、すじにくシチュー氏は過去に二度「暴言または嫌がらせ」でブロックされています。すじにくシチュー氏も初心者ではないのですから,一度自己の行動を見直してみてはいかがでしょう。」
::↑ゼロリスク信仰。たとえば自動車の運転で、交通違反キップを切られるようなもんでしょう。なにも運転しなければ事故は起きませんが、しかしそれだと現代の文明は止まります。
::まあ、wikipedia日本語版には、交通違反キップをすっ飛ばしてピストルで射殺しようとしてくる、頭のおかしい人物が多いという印象ですがね。あ、これは「印象」なので、私の内心の自由です。文句をいわれる筋合いがありません。
::wikipedia日本語版は人気投票サイトなので、人気さえあれば、嫌がらせを吐いても許されているのが実態です。私からすれば過去にwikipedia管理人(当時)の「ぱたごん」に、「熱電対」の記事で、彼の知識不足で皮肉・揶揄を言われましたが、なのに彼「ぱたごん」はなんの謝罪もしていません。それとも、暴言はダメで揶揄は許されるんですかねえ。wikipedia日本語版にそういう馴れ合い運営の改善が見られないので、この機会にwikibooks側に記録に残させていただきますわ。--[[利用者:すじにくシチュー|すじにくシチュー]] ([[利用者・トーク:すじにくシチュー|トーク]]) 2022年5月8日 (日) 16:52 (UTC)
:::うーん,貴方は本当に難しい人だね。
:::ちなみに私は相手が暴力団でも,礼儀正しく友好的に接してきたら,割と普通に付き合うよ。もっともこの社会で暴力団と付き合うことはリスキーだけどね。ちなみに私はその筋の者ではないよ^^;;;
:::それにあなたの出典信仰はどこから来るのかね? 確かにウィキペディアならそのくらいの出典重視で仕方ないけど,ウィキブックスではちょっと違うんじゃあないの? あなたがやたらこまごま出典を書いているのを見ても,ただただ自分の粗雑な文章と主張と理解にお墨付きと言い訳を与えて,張りぼてを価値あるように見せようとしているとしか見えないね。
:::貴方もかなり独特の発想で生きているんだから,世間の著名評論家とやらが,かなりのインチキな人間だってわかってるでしょ?--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月8日 (日) 17:49 (UTC)
:::それにねー,私出典としてはいちいち書いていないけど,貴方の記述を上書きするようになってから,結構検定教科書,手に入れて読んでいるんですよ。保健体育の教科書は2冊手に入れたし,商業科の経済のテキストもある。最近ではちょっとある目論見があって,工業高校の電子回路の教科書読んでいます…。でも私は本当に重要だと思うとき以外は,出典はいちいち書かないよ。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月8日 (日) 18:10 (UTC)
::::(返信)投稿ブロック依頼については「上に新規依頼が積み上がる」と勘違いしていました。申し訳ございません。
::::お二方のコメントを見るに「出典を出す,出さん!」で揉めているのではないでしょうか。
::::出典については[[Wikibooks:「要出典」をクリックされた方へ]]がありますが、トークページでは議論提起がなされています。しかし、今のところウィキブックスには「出典を出せ!」という明確な方針はありません。
::::私が思うに,ウィキブックスでは出典は'''出した方がいいが必須ではない'''といったところでしょう(よほどのトンデモ理論を書かない限り大丈夫だと思います)。ただ、出すのなら[[w:Wikipedia:検証可能性]]に沿ったものの方がいいですね。
::::次にすじにくシチューさんへの返信になりますが、烏滸がましいのを承知で言わせていただきますと「JAWPの[[User:ぱたごん|ぱたごん]]さんがどうこうというのは不適切であると考えます。Wikibookshあまだ方針の整備が追いついていないので,Wikipediaなどの関連文書を読んでみてはいかがでしょう。--[[利用者:スタリオン箕浦|スタリオン箕浦]] <span style="font-family:Times"><small>([[利用者・トーク:スタリオン箕浦|会話]]/[[特別:投稿記録/スタリオン箕浦|投稿記録]]/[[特別:Log/スタリオン箕浦|ログ]]/[[特別:メール送信/スタリオン箕浦|メール]])</small></span> 2022年5月9日 (月) 12:57 (UTC)
:::::いやー私は出典の話はこの問題の本質ではないと思う。出典がどうのというのはすじにく氏が防戦のカードとして出しているだけで,全く重要な問題ではないと思っています。私とすじにく氏との戦いは,まず私がすじにく氏の文章の多くは不適切で,良くないものであり,こういうものをここのコンテンツとして表示しておきたくない,と,そう考えているのがスタートです。だから,まず自分自身で書き変える,上書きするし,一方でトークページで文句を言う。すじにく氏は私のその攻撃に対して,防戦,ディフェンスしているわけですね。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月9日 (月) 16:26 (UTC)
*{{RFB|中立}}
横から失礼するよ。
両名一連の流れすべてを追ってるわけじゃないですが、あなた(Honooo)一時期やたらと更新履歴の一覧で目立ってた人だよね?今議題に上がってるすじにく氏以外にも、以前音階カテゴリの執筆してた方(ice氏)のトークページに「権威的な執筆でなんかムカつくし不快」ってコメントされてましたよね?
今あなたの中で最優先の目の上のたんこぶはすじにく氏なのでしょうが、仮にあなたの要望が受理されて彼がブロックされたとしても、またすぐ他の利用者にイラついて次々と標的を変えるだけのような気がしているよ。私もスタリオン氏と同じ中立の立場から述べるけど、安易にこの受諾は飲むべきではないと判断してる。(だからといってすじにく氏の肩をもってるわけじゃないから誤解なきよう)
過去の編集履歴やプロフ覧から見るに、音楽カテになんの造詣もなさそうなあなたからいきなり難癖つけるような人がいる方があまりいい気分ではないですよ。あなたに対して萎縮してwikibooksの書き込みや利用者が減ってしまったら、ますます利用者が減ってしまう。履歴もたどってみたけど、この音楽カテのIce氏以外にも何かにつけてすぐ他人のトークページ来ていちゃもんつけてくるって普通にこわいし不信感しか残さないって思わない?
Webの自由参加型のコミュニティなんだから、いろんな人がいるってこと前提でみんな利用してるよ。そりゃ自分とぜんぜん違う立場で書く人だっている。中には気に入らない意見や内容だってあるさ。でもそれでいちいちキレ散らかしたり、ブロック依頼なんて提出してるかね?いちいち気に入らない認定した人をこうやって攻撃するって普通に他の人が動きづらくなる。その事をもう少し理解してほしい。
上に書かれてる理由も「単に俺が気に入らんから」の一点張りで、第三者にすじにく氏の文章のどこがwikiガイドラインに沿った時に抵触してるのか納得できる説明になってない。まずはそこをあなたの感情抜きで理路整然と書かなきゃ誰も納得なんてできない。あなたが気に入らないからじゃなくて、wikiのガイドラインや明文化された規則に照らした時の問題点を列挙してなきゃ管理者権限持つ人間も動けない。
それができないんだとしたら、その主張は本当にあなたの個人的な癇癪にすぎなかった、ってことだからそもそもここに書くべきじゃない。[[利用者:沼雲バーガー|沼雲バーガー]] ([[利用者・トーク:沼雲バーガー|トーク]]) 2022年5月11日 (水) 15:34 (UTC)
:うーん,貴方の論点は非所に重要な事だと思うから,いずれもう一度じっくり考えてから返答するけど,とりあえずいくつかの言い訳はさせてもらう。まず,ice氏に関しては,私はあの時,この人物ってすじにく氏と同一人物じゃないのかなって思ったんだよね。まあよく考えてみると,今では違うと思っているけど…。それに音楽について<del>に</del>は好きだしそこそこ知っているよ,知っているうえで批判したんだけど…。私はすじにく氏は大問題を持っている人だと思うけど,本当の意味で消し去りたいと思っているわけではない。はっきり言ってすじにく氏以上の不適切な人は今後現れないと思っている。あと,京大の連中にも絡んだけど,そしてこの人は明らかにすじにく氏ではないけど,この人の文章,そしてその周りで面白がってはしゃいでる連中の悪質さは絶望的だと思うけどね。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 16:13 (UTC)
:んー,いろんな人がいる前提でみんな書いているってほんとかね? 結局多数派のあんたらの主張がごり押しで毎日通ってない? エキセントリックな人はみんなあんたらの虐めで消されていないかね? あんたらが状況に乗じて汚いことを毎日し続けるのが自由なら,俺が切れまくって,絡みまくるのも自由じゃあない?^^。とはいえ俺は節度を持ってやっているつもりなんだけどね。とはいえこの話はかなり難しい厄介な話だね。もうちょっと考えてみるよ…。逆にあんたが個人的なうっぷん書いてるだけかもよ。俺みたいな変な奴がいるとここで書きづらいって事でしょ?そう思う奴がいっぱいいれば,みんながみんながって言えるんだろうけど,何かインチキだよね。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 17:00 (UTC)
:皆様、[[w:WP:EQ]]をご覧ください。--[[利用者:スタリオン箕浦|スタリオン箕浦]] <span style="font-family:Times"><small>([[利用者・トーク:スタリオン箕浦|会話]]/[[特別:投稿記録/スタリオン箕浦|投稿記録]]/[[特別:Log/スタリオン箕浦|ログ]]/[[特別:メール送信/スタリオン箕浦|メール]])</small></span> 2022年5月12日 (木) 01:46 (UTC)
それならあなたの一方的な思い込みで名指しで八つ当たりされて火の粉を振りかけてしまったIce氏に対して、思い込みが解消された時点でせめて一言詫びを入れるのが最低限の礼儀ってもんでしょう。部屋を自分で散らかしておいて後は知らんぷりってどこの大名殿かと言わんばかりの傍若無人とは思わんかね?
あともう一つ。いきなりこっちをあんたら呼ばわりでひとくくりにして、「日々汚いことしてる」呼ばわりとはいくらなんでも失礼すぎないかね?
現トピックスのすじにく氏、音階カテのIce氏、そしてあなたがさっき話題に出した京大関係者?、極めつけは中立票を投げた私。次から次へと牙をむいてあれも敵だこれも悪だなんて言って、少々無様が過ぎるってもんだ。
これは自分の感想だが、自分で自分を狂人呼ばわりするヤツってのは大抵ニセモノだと思ってるよ。逃げ口上の一種くらいにしか思わないしセンスも感じたことは無い。京大がなぜここで出てきたのかよく分からんが、毎年テレビや動画でニュースになってる京大の卒業式にだって自称変人アピールのしょうもない人間なら掃いて捨てるほどいるしくだらないと思っているよ。あなたが京大卒だろうがなかろうがどうでもいいが、学歴を伝家の宝刀みたいに後生大事に忍ばせてても、数年もしないうちに錆びて使い物にゃなりゃあせんよ。[[利用者:沼雲バーガー|沼雲バーガー]] ([[利用者・トーク:沼雲バーガー|トーク]]) 2022年5月11日 (水) 17:49 (UTC)
:うーん,お前滅茶苦茶だな。お前みたいなやつの相手するほど俺は暇じゃあないんだよ。とりあえずここで何が起こっていたか,もうちょっと時間かけて読んでみろよ。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 17:55 (UTC)
:ほんとの偽物はお前。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 17:56 (UTC)
:中立って言えば礼儀正しいわけではない。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 17:57 (UTC)
:失礼じゃあないよ,実際お前みたいなやつ,毎日汚い事以外一切してないだろ?--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 17:58 (UTC)
:多少の喧嘩はどこでもある。それに正義ぶって介入して威張ってるお前が一番糞。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 18:00 (UTC)
:謝れ謝れってやたら云うけど,お前は本当に謝るべきこと謝ってるか?--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 18:03 (UTC)
:学歴どころか,お前は存在自体が腐ってさびて,偽物で糞。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 18:04 (UTC)
:お前だってセンスどん底だろ?^^;;;;--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 18:06 (UTC)
:敵だなんて思ってないよ。はっきりいて詰まらん奴らで眼中にない。ただ不愉快極まりないので文句言ってるだけ。京大,すじ肉,あんた,こいつらは糞だから全く興味ないけど,ice氏には少し興味ある。でも謝る必要は無いだろう。そこそこ意味ある指摘だし批判だと思うけど…。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 18:10 (UTC)
:あとこれは大した重要な事ではないんだけど,例えば葛飾北斎なんて,彼は自分を狂老人と名乗っていたんだけど,彼も偽物だと思う?--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 18:15 (UTC)
:あ,画狂老人か…。誰かほかに,自分がキチガイだと言及していた著名人いなかったかなー--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 18:18 (UTC)
:大体逃げない俺は偉いなんて思ってる奴が一番下らんね。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 18:26 (UTC)
:大体自称変人アピールの人間だって,お前よりははるかに素晴らしい人だろう。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 18:35 (UTC)
:大体極めつけが私って…何でお前が一番偉いことになってるの? お前が一番この場で糞なんだよ?--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 18:57 (UTC)
:それにさーはっきり言わせてもらうけど,本当の狂人はお前なんだよ? 気づいていた?^^--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 19:03 (UTC)
:: 正直なところ依頼者の書いた文章群をちゃんと読んで(私は読む気なくしました)コメントしている被依頼者には敬意を表したいところですが、この連投を見て擁護する気が萎えました。IPなので投票権はありませんが「依頼者・被依頼者双方ブロック」が一番妥当な結論だと考えています。--[[特別:投稿記録/240F:7A:EA2E:1:7865:36BF:53E8:693E|240F:7A:EA2E:1:7865:36BF:53E8:693E]] 2022年5月15日 (日) 09:45 (UTC)
:::↑そうかなー。俺は明らかにここでは,沼の底ハンバーガーの方が120%悪いと思うけど…。まあブロックされるならされるでしょうが無いけどね。でもブロックっていうんなら、このハンバーガーを先にブロックすべきだな。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月15日 (日) 14:04 (UTC)
先日のトークページの差し戻しでこちらも燃料を注いでしまったようです。
念のため意見表明をしておきます。
私があなた(H氏)に懐疑的(不快)な印象をもったのは二年前の一件からです(あなたの記憶に
残っているかは知りませんし今さら蒸し返す気もありません)。
そして最初にことわっておきますが、'''私はすじにくシチュー氏(以下S氏)の支持者、擁護者でもなければ断じて本人によるなりすましでもありません'''。
ウィキペディアで彼が引き起こした騒動の渦中に私は居合わせておりましたし、強権的な彼(S氏)には物書きのはしくれを名乗る資格すら無いと思っています。
私があなた(H氏)に釘をさしたのは、当時私に投げてよこしたあなたの態度、言葉と何一つ変わらないことが形を変えてここで行われていたからです。
私に言わせればS氏とH氏はもはや第三者のユーザー目線では同類です(以前ではS氏の方がはるかに不快でしたが
今では両氏の間に違いを感じません)。
スタリオン氏やバーガー氏のように情状酌量を匂わせる立場からではなく、私も'''S氏とH氏の双方ブロック'''(一定期間)が落としどころだと思います。
[[利用者:DS3techcan|DS3techcan]] ([[利用者・トーク:DS3techcan|トーク]]) 2022年5月15日 (日) 14:39 (UTC)
:まあそれで落とすんなら落とすんでいいけど,貴方もそんな正当な人間かね? たとえどんな理由があろうと,ほんとのアカウントでその意見を書くべきではないかね?あと2年前って何かね?できればもっとはっきり教えてほしいけど。椎楽氏にも書いたけど,私はすじにく氏と同類で全く構わないよ。でもね,あんたも同じだよ。何も偉くない。おそらく貴方は高校生かね。それとも誰だろう?仕方ない,ちょっと調べてみるか…--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月15日 (日) 14:47 (UTC)
:或いは,Aaさんかねー。でもやっぱりあなたが誰かはっきりさせてもらわないと,この問題は解決しないよ。トークページ荒らされるってよくあなた方書くんだけど,私としては正当な意見表明してるだけのつもりなんだけど…--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月15日 (日) 14:55 (UTC)
:うーん,いろいろ考えてみたんだけど,やはり貴方がやるべきことは,その2年前の件を蒸し返すことだと思う。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月15日 (日) 16:00 (UTC)
:横から失礼します。
:DS3techcanさんがすじにくシチュー氏のなりすましないし、擁護者であると誤解しましたこと、この場を借りてお詫び申し上げます。
:大変失礼いたしました。--[[利用者:椎楽|椎楽]] ([[利用者・トーク:椎楽|トーク]]) 2022年5月16日 (月) 15:03 (UTC)
着火剤ってのはどこに転がってるか分かったもんじゃあないね。キャンプ場に投棄された手ごろな角材だったらば用心もしたが、落ちてるとこには落ちてるもんだ。キャンプってのはここWMPコミュニティとある意味で同じだ。どっちも合意と取り決められた規則で形成された公共の場だな。焚き付けて喰っちまおうってのはいただけない。
それはさておきここのトピックスはなんだい? 画伯の威を借りてまで自分を狂人に見立てたくて必死なのにはお見それしたが、感情まかせに手前が撒いた種の不始末もできねえでどうするよ?トピックス冒頭ですじにく氏が言う「詐称」ってのもあながち的外れな指摘ではないのかもな。こちらが聞いてもないのに京大関係者との確執を持ち出すわ、画伯を嵩にかかって自称変人のアピールにこだわりたがるわ、とにかく自分を大層な人物に仕立て上げたいのはとりあえず伝わる内容だったよ。
WMPっていうでっかい傘の下に入ってみなさんと並んだのはあんたの意思よ。そのわりに狂人めかして傘の柄を握るのは自分だみたいなおかしな振る舞いをなさっておられるようだから、怒りまかせにブロック依頼を出す、自分様の意にそぐわぬ書き込みは抹消されねば気が済まぬ、上書き差し戻しと思いのまま。こりゃあ管理者様も真っ青だ。さぞかし手を焼いておられよう。
公益性を私欲が喰っちまってる。そうと知らずに焚き付けたこっちに非はあっだが、誰が手をかざしたってあんたはきっとそうだろうさ。燃え広がって誇示とナワバリ。高く燃えて横に広がろうとする。あんたに諸々の自覚は一生宿らんだろうさ。あんたがひとくくりに見下してかかった「みんな」に今までのように煙たがられながら、手前で焼野原にした禿山で最後は火種を失うがいいさ。わざわざ見届ける気はないんで、これで失礼させてもらうとするよ。[[利用者:沼雲バーガー|沼雲バーガー]] ([[利用者・トーク:沼雲バーガー|トーク]]) 2022年5月12日 (木) 02:20 (UTC)
:ハイハイ,偉い偉い,さようならインチキ君(^^)凸--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月12日 (木) 02:27 (UTC)
:人生一回限り,破滅するならするでそれも人生じゃあない? あんたみたいに一生愚か者のままただ集団化する手管だけ持って,インチキな人生送ってインチキに生きていくより,破滅人生の方が100倍価値あるかもよ?--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月12日 (木) 02:38 (UTC)
::'''皆様、[[w:WP:EQ]]をご覧ください。'''ヒートアップしているのではないでしょうか。--[[利用者:スタリオン箕浦|スタリオン箕浦]] <span style="font-family:Times"><small>([[利用者・トーク:スタリオン箕浦|会話]]/[[特別:投稿記録/スタリオン箕浦|投稿記録]]/[[特別:Log/スタリオン箕浦|ログ]]/[[特別:メール送信/スタリオン箕浦|メール]])</small></span> 2022年5月12日 (木) 05:39 (UTC)
apv0g1hu2phxme79r9bk256hs36eyzf
205689
205684
2022-07-22T20:03:32Z
Honooo
14373
/* 被依頼者のコメント */
wikitext
text/x-wiki
==== {{User2|Honooo}} ====
===== 依頼理由 =====
この人物は、議論ページなどで多くの嘘をついている。詐欺師の疑いがあると感じます。
当初、[[検定外高校生物]]で、彼は自身を生物系の専門家だと述べていた。しかし、彼のその後の編集を見ても、まったく生物学や理系の専門的な記事は無い。
また、基本的に彼はなぜか専門外のはずの美術やゲームプログラミングの記事に、断定的に口を出すのだが、その割には出典を1冊も挙げられていない。このブロック依頼の時点(2022年3月1日)で、彼は満足に出典を挙げていない。
一方、彼が文句をつける利用者: すじにくシチュー は、主観的な記述も多いが、いちおうは出典をあげられている(このブロック依頼を提出している人物です)。
* 参考
:[[高等学校美術I]]
:[[ゲームプログラミング]]
他にも、彼の行動には、不審な点が多くあります。
たとえば談話室の投稿で、編集者 Honooo によって下記のような投稿がされている。(出典 [https://ja.wikibooks.org/w/index.php?title=Wikibooks:%E8%AB%87%E8%A9%B1%E5%AE%A4&oldid=194751 2022年2月28日 (月) 12:38時点における版] )
:引用
<pre>
== Webで起きていること ==
あのー私はこういうことについてはほとんど知らないし,情報も持っていないのですが,でもツイッターなんかの発言では時々見るんだけど,なんか,Web上ではあらゆるところで,特定の政治立場や経済利益を手に入れるために,お金をもらって,その勢力に都合いい記述を書きまくっている人物がいるようですね。私自身は完全に趣味で,遊びで,もちろんこういうサイトですからそれなりに公益や学問的な確かさを考慮して書きますが,そうじゃない,馬鹿ばかしい邪念と金のために書いている奴がかなりいるらしいって聞いたことがあるけど…。その辺どうでしょうかね?皆さんはどう思います?--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年1月7日 (金) 17:30 (UTC)
</pre>
:以上、引用.
なんだか陰謀論くさいことを言っています。
私は彼を、自己啓発セミナーかカルト宗教か何かの類の人間だと疑っています。
そう考えると、理系の知識がとぼしいのに理系を名乗る点や、美術(それも主にアニメやマンガなど娯楽関係)のことばかり主張しているのも合点が行きます。
引用文では「学問的な確かさを考慮して書きますが,」とあるが、しかし実際の彼の投稿では、出典をあげられていないものが大半です。彼は談話室の投稿を通じて、自身の活動履歴を捏造しています。
彼は詐欺をしようとしています。ブロックするべきです。
『[[トーク:ゲームプログラミング/バランス調整]]』でも、彼の発言は奇妙です。
他の編集者から、下記のように指摘されています。[https://ja.wikibooks.org/w/index.php?title=%E3%83%88%E3%83%BC%E3%82%AF:%E3%82%B2%E3%83%BC%E3%83%A0%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0/%E3%83%90%E3%83%A9%E3%83%B3%E3%82%B9%E8%AA%BF%E6%95%B4&oldid=194705 トーク:ゲームプログラミング/バランス調整 ]
<pre>
本文に対して不満があるならば、本文自体を修正することをお勧めします。そこで編集合戦等が起こった時にはじめて(又は、編集合戦が起こらないように編集意図を明確にするため)、「トーク」欄を利用してください。--Tomzo (トーク) 2021年12月14日 (火) 09:51 (UTC)
</pre>
<pre>
書けないものに対する評価は難しいと思います。その表現がおかしいと思えば、穏当な表現に直すのは可能ですし、又、読み手として内容の正否が不明であれば、「投稿者の主観でなく、関係する者の一般的な考えであることを求める(いわゆる、『要出典』)」などの対応が可能だと思います。--Mtodo (トーク) 2021年12月14日 (火) 10:55 (UTC)
</pre>
<pre>
記事本文がご自身の主義主張と対立する内容であることは、相手に不作法を働いて良い理由にはなりません。
本文に異議を唱えるのは自由ですが、礼節をもって意見交換はなされるべきです。
Wikiのエチケットを遵守した上でのご利用をお願いします。 --Jqop (トーク) 2021年12月14日 (火) 19:10 (UTC)
</pre>
また、現在は削除されている指摘ですが(Honooo の議論と一緒にされたので)、下記のようなHonooo氏を批判する指摘があります。[https://ja.wikibooks.org/w/index.php?title=%E3%83%88%E3%83%BC%E3%82%AF:%E3%82%B2%E3%83%BC%E3%83%A0%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0/%E3%83%90%E3%83%A9%E3%83%B3%E3%82%B9%E8%AA%BF%E6%95%B4&oldid=193046 トーク:ゲームプログラミング/バランス調整 2022年1月30日 (日) 07:52時点における版 ]
<pre>
少し目に余りましたので以下指摘させていただきます。
ここはTwitterや某匿名掲示板ではありません。
そしてあなたの個人的な鬱憤を晴らす場でもありません。
ここ数日は特に連投が少々過ぎるようです。
適切な使用を心がけて下さい。
Chziob47368 (トーク) 2022年1月23日 (日) 04:11 (UTC)
</pre>
また、要約欄ですが、他編集者による指摘(たとえば 2022年2月28日 (月) 12:22 Mauzie683794 )で、Honooo の編集が、
<pre>
投稿者のプライベートな日記や一人語りで占められ、本文の議論と明らかに乖離した内容。 暴力的な言い回しや性的揶揄も確認。いずれも本文と関連がなく常習的荒らし行為。
</pre>
といわれています。
にもかかわらず、彼 Honooo と思われるIPの行動は
<pre>
2022年2月28日 (月) 12:23 2404:7a86:8800:1c00:20fd:f14f:ff87:a005
Mauzie683794 (トーク) による版 194740 を取り消し。だからね、本人以外はry。
</pre>
です。
[[トーク:高等学校国語総合/土佐日記]]では、高校国語となんの関係もない感想の垂れ流しです。[https://ja.wikibooks.org/w/index.php?title=%E3%83%88%E3%83%BC%E3%82%AF:%E9%AB%98%E7%AD%89%E5%AD%A6%E6%A0%A1%E5%9B%BD%E8%AA%9E%E7%B7%8F%E5%90%88/%E5%9C%9F%E4%BD%90%E6%97%A5%E8%A8%98&oldid=194759 2022年2月28日 (月) 13:24時点における版 ]
<pre>
もがなって,タモリさんのハナモゲラに共通するとこない? 無いか^^;;;--Honooo (トーク) 2022年2月28日 (月) 13:24 (UTC)
</pre>
--[[利用者:すじにくシチュー|すじにくシチュー]] ([[利用者・トーク:すじにくシチュー|トーク]])
:いやいやすじにくさん,明らかにいくつか事実誤認があるよ。まずそのIP は俺じゃあないよ。誰かは大体想像つくけど,少なくとも現実世界の知り合いではない。あと宗教云々も,確かに宗教には興味あるけど,変なはまり方はしないように気を付けてる。あと理学部生物の学士というのも事実。逆に専門分野だから今更書きたくないだけだよ。仕事ではかかわってるしね。とにかく落ち着いてよ。どうしてあなたは絶対の正解にたどり着かないのかね?--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年2月28日 (月) 15:52 (UTC)
(すじにくシチューによる追記)編集者 Honooo には、下記のような疑惑もあります。固定リンク [https://ja.wikibooks.org/w/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85%E3%83%BB%E3%83%88%E3%83%BC%E3%82%AF:Mauzie683794&oldid=194959 『利用者・トーク:Mauzie683794』2022年3月2日 (水) 11:11時点の版] からの引用ですが、
<pre>
当該の投稿者の書き込みの中に「議論は議事録だから消せない」と言い放った直後にエヴァンゲリオンの話を展開していることがら、容易に削除できないwikiのルールを逆手にとって承認欲求の肥やしにしている節が見られます。なんらかの対処は講じるべきではあるかと考えます。
除去が通らないのでしたら、少なくとも上で指摘したマンガ、アニメ関係の落書きは削除がなされるべきでしょう。 Mauzie683794 (トーク) 2022年3月1日 (火) 10:57 (UTC)
</pre>
--[[利用者:すじにくシチュー|すじにくシチュー]] ([[利用者・トーク:すじにくシチュー|トーク]]) 2022年3月2日 (水) 11:29 (UTC)
:滅茶苦茶だよ,先輩^^;;;。単に話の流れでちょっと遊んでるだけだろ?^^;;;;;。承認欲求ならお前ら二人のほうが絶大絶倫だよ。ほんとこんな奴らと付き合わなきゃあならないなら,ブロックされた方がまし,楽かもね。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年3月2日 (水) 12:14 (UTC)
===== 依頼者のコメント =====
(すじにくシチューのコメント)wikibooksに限らずwiki姉妹プロジェクトは、出典主義です。なので、私としては、自信の書いた記事において、私が出典をあげてない記事を消されたり「要出典」などと上書きされるのは構いません。ですがHonoooは、出典を挙げたにもかかわらず、しかし彼はそれでも出典に当たらない、またはもし該当の出典が入手困難だとするなら代わりの信頼できる出典もしないまま、高圧的・断定的に上書き編集をします。私の記事だけでなく、私が上記ブロック依頼で紹介した他編集者からHonoooへの文句のあるページの本文でも、彼による同様の編集傾向が見られます。
記事が生まれたばかりなどの段階などの理由で、出典まだが乏しい段階でなら、著作方法のひとつとして満足な出典もないで持論を展開するのも一つの効率的な著作方法でしょう。ですが彼 Honooo は、記事に出典が集まりだしても、まったく自身からは別の出典も持ち寄らないまま、他人の編集を上書きします。これは大変にwikiの出典主義の品質を損なっていると考えます。
もし彼 Honooo が何か他編集者の編集に異論があるなら、その異論の根拠となる出典を書籍名などとともに具体的に出せばいいのです。お金がなくて書籍を購入できないとしても、近い分野のプロや企業などの公式ブログを参考にするとか、あるいは文献を図書館で借りるとか、色々な出典の方法がありますし、wikipediaでもそのような方法が取られている記事も多々あります。しかし彼はそういった努力を全くしません。--[[利用者:すじにくシチュー|すじにくシチュー]] ([[利用者・トーク:すじにくシチュー|トーク]]) 2022年3月2日 (水) 12:35 (UTC)
===== 被依頼者のコメント =====
:まあ少なくとも,あんたの努力はすべて自己満足だけど,そうねー,今回の問題は何らかの議論が必要かも。もうちょっと待ってくれ,どうするか対処考えてみる。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年3月2日 (水) 12:39 (UTC)
:まず第一に,別の場所でも書いたけど,ウィキメディアが求めているのは事実に対する出典だと思う。基本的にはウィキペでは意見は独自研究だから却下でしょ? もちろん誰かがこう考えてるというのはいいだろうけど,あんたの場合は誰かがこう考えてるからそれは正しいまで踏み込んでるように見えるな。なんだかんだであんたの意見が入ってるんだよ。だから俺が別の人の意見を出典にして反論することをあんたは望んでるんだろうけど,俺は基本的にあんたみたいな読書記憶人ではなく,思考思想人なのでね。その展開は無理だよ。じゃあ書くなっていうのは,あまりにも高圧的じゃあない?--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年3月2日 (水) 12:47 (UTC)
:そうね,じゃあまず今後はここの出典と独自研究に関する文章を少し時間かけて読んでみるよ。ただここではどちらもまだ草案段階だった?それとも一応決定していたかな?それも含めてね,今後少しずつは読んでいくよ。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年3月2日 (水) 12:55 (UTC)
:今ちょっと調べてみたけど,草案の出典明記しかなかったよ。だからって独自研究OKとは主張しないけど,どうする?どう考えたらいいの?--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年3月2日 (水) 13:13 (UTC)
:もうちょっと反論しておくかね。ただ本当はすじ肉的な人間には一切かかわりたくないんだけど、ちょっとこの場も膠着しているようだから…。そもそもWikipediaが出典主義なのは分かるけど、Wikibooksはほんとに出典主義なの?明文化されたページある?お前が集める出典は、お前みたいに下らん人間が喜ぶ馬鹿議論が書いた本ばかりだろ?Wikiの品質って言うけど、お前の馬鹿文なら、お前以外の歴史上のだれが上書きしたって、質は確実に高くなるよ。ほんとにWikiの品質高めたいなら、お前の意に染まない出典も集めて、その意見も記述して、中立的な文章を書けよ。仮にお前がここで、別名義で何か偉そうなことを多量に書いていたとして、お前ひとりの存在ですべてゼロ、マイナスだね。努力努力っていうけど、お前は努力なんて何一つしていないよ。欲望のままに本買って読んでここで書き散らしてるだけだろ?--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年3月4日 (金) 14:36 (UTC)
さて、被依頼者として今回のこの訴追は、ほとんど全てが事実誤認と、根拠のいい加減な依頼者にとって不当に都合のいいしかも事実ではない決めつけから発しているので、即刻棄却すべき案件だと思う。しかも依頼者が引用した文章の元のページやその前後の経緯をみて調べれば明確なように、事実をかなり捻じ曲げた主張がなされていて、例えばこれは、モーセの十戒の、「他人について偽りの証を答えないこと。」にさえ抵触するのではないか? このように、論理的、道義的、倫理的、宗教的、常識的、思想的、全ての面にわたって不適切な訴追なので、即時棄却すべきだろう。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年7月22日 (金) 20:03 (UTC)
=====投票、コメント=====
*{{RFB|中立}} まず、Honoooさんには[[特別:差分/195111|こちら]]のような礼を失した発言が多数見受けられます。こうした態度がすじにくシチュー氏を苛立たせているのかもしれません。
ただ、当方はすじにくシチュー氏にも少なからず問題があると思います。まず被依頼者を「詐欺師」と表現していますが,これも適切とは言い難い発言です。お二方は少なからずヒートアップなさっているようですが、まずは[[Wikibooks:コメント依頼/すじにくシチュー]]で話し合ってみてはいかがでしょう。現状,見る方によっては「すじにくシチュー氏がブロック依頼を提出し,Honooo氏が報復依頼」という感想を抱かれるのではないでしょうか。また、すじにくシチュー氏は過去に二度「暴言または嫌がらせ」でブロックされています。すじにくシチュー氏も初心者ではないのですから,一度自己の行動を見直してみてはいかがでしょう。
以上の理由より,中立とさせていただきます。--{{Unsigned2|スタリオン箕浦|2022年5月8日(月)13:20(UTC)|[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]])}}
:いやいやスタリオンさん,貴方意外と事実認識がいい加減ですね…。まずブロック依頼に関しては,私が提出したあとにすじにく氏が提出したんですよ。それともそれをわかったうえで書いているんですかね…--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月8日 (日) 15:59 (UTC)
:(すじにくシチューによる、コメントへのコメント)
:* 「礼を失した発言が多数見受けられます。こうした態度がすじにくシチュー氏を苛立たせているのかもしれません。」
::↑いや、礼儀があれば許されるって問題じゃないと思うのですが。じゃあ例えば、あなたは暴力団が敬語を使ってきたら容認して要求にしたがうのか、というのと同じ問題ですよ。言葉遣いではなく、Honooo の行動の実態が問題だと言っている。
::出典をあげずに自己の意見の陳列ばかりをするのが問題だと、私は言おうとしている。なお、私の場合、自己の意見ではなく、商業の評論家の意見を書いているわけです。評論家の意見に対する、その評論家の問題点などとして気づいた意見を書く場合もあるかもしれませんが、しかし少なくとも、いきなり「私はこう思う。お前らもこう思え。」と書くような事は、少なくとも小中高の教科書本体の記事では、していないつもりです(あるとしたら、学習方法のページぐらい。これは編集当時に市販の書籍がなかったか、あるとしても極端に少ないので、普通の出典を集めづらいので。なので私だけでなく他編集者も、学習方法ページの編集では出典不足なことが多い。むしろ私は出典が多いほう。)。仮に私の不注意で出典不足のそういう記事があっても、私はできるだけ出典をつけているわけですから、じゃあその出典に他編集者が他の出典をつけて上書きすればいいだけです。出典のない Honooo の意見陳列とは違います。
:: あと、裏を返せば、もし他編集者が出典をきちんと挙げられて、編集者個人の意見の開陳極力抑えられるなら、多少の言動の荒さがあったとしても、私はその他編集者を容認する可能性すらあるかもしれません。なのに「地道に出典を探そう。市販の教科書を買って読もう」とする行動ではなく、議論での口先でやり過ごして要求を通そうという発想が、まさに詐欺師的な発想であり、私は好きじゃないですね。あ、この好き嫌いは私の好みですんで、内心の自由なので、文句を言われる筋合いはありません。
:* 「被依頼者を「詐欺師」と表現していますが,これも適切とは言い難い発言です。」
::↑なぜ言い難いのですか? 感想ではなく、「これこれこういう理由で、言い難い」という根拠を提示してほしいですね。それができないなら、単なる感想ですね。
::世間は、あなたの好みなんて知りません。あなたの内心を察する義務なんてありません。あなたは人気芸人じゃないし、私はあなたのファンでもないので、あなたの心中を察する義務はありません。
:* 「また、すじにくシチュー氏は過去に二度「暴言または嫌がらせ」でブロックされています。すじにくシチュー氏も初心者ではないのですから,一度自己の行動を見直してみてはいかがでしょう。」
::↑ゼロリスク信仰。たとえば自動車の運転で、交通違反キップを切られるようなもんでしょう。なにも運転しなければ事故は起きませんが、しかしそれだと現代の文明は止まります。
::まあ、wikipedia日本語版には、交通違反キップをすっ飛ばしてピストルで射殺しようとしてくる、頭のおかしい人物が多いという印象ですがね。あ、これは「印象」なので、私の内心の自由です。文句をいわれる筋合いがありません。
::wikipedia日本語版は人気投票サイトなので、人気さえあれば、嫌がらせを吐いても許されているのが実態です。私からすれば過去にwikipedia管理人(当時)の「ぱたごん」に、「熱電対」の記事で、彼の知識不足で皮肉・揶揄を言われましたが、なのに彼「ぱたごん」はなんの謝罪もしていません。それとも、暴言はダメで揶揄は許されるんですかねえ。wikipedia日本語版にそういう馴れ合い運営の改善が見られないので、この機会にwikibooks側に記録に残させていただきますわ。--[[利用者:すじにくシチュー|すじにくシチュー]] ([[利用者・トーク:すじにくシチュー|トーク]]) 2022年5月8日 (日) 16:52 (UTC)
:::うーん,貴方は本当に難しい人だね。
:::ちなみに私は相手が暴力団でも,礼儀正しく友好的に接してきたら,割と普通に付き合うよ。もっともこの社会で暴力団と付き合うことはリスキーだけどね。ちなみに私はその筋の者ではないよ^^;;;
:::それにあなたの出典信仰はどこから来るのかね? 確かにウィキペディアならそのくらいの出典重視で仕方ないけど,ウィキブックスではちょっと違うんじゃあないの? あなたがやたらこまごま出典を書いているのを見ても,ただただ自分の粗雑な文章と主張と理解にお墨付きと言い訳を与えて,張りぼてを価値あるように見せようとしているとしか見えないね。
:::貴方もかなり独特の発想で生きているんだから,世間の著名評論家とやらが,かなりのインチキな人間だってわかってるでしょ?--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月8日 (日) 17:49 (UTC)
:::それにねー,私出典としてはいちいち書いていないけど,貴方の記述を上書きするようになってから,結構検定教科書,手に入れて読んでいるんですよ。保健体育の教科書は2冊手に入れたし,商業科の経済のテキストもある。最近ではちょっとある目論見があって,工業高校の電子回路の教科書読んでいます…。でも私は本当に重要だと思うとき以外は,出典はいちいち書かないよ。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月8日 (日) 18:10 (UTC)
::::(返信)投稿ブロック依頼については「上に新規依頼が積み上がる」と勘違いしていました。申し訳ございません。
::::お二方のコメントを見るに「出典を出す,出さん!」で揉めているのではないでしょうか。
::::出典については[[Wikibooks:「要出典」をクリックされた方へ]]がありますが、トークページでは議論提起がなされています。しかし、今のところウィキブックスには「出典を出せ!」という明確な方針はありません。
::::私が思うに,ウィキブックスでは出典は'''出した方がいいが必須ではない'''といったところでしょう(よほどのトンデモ理論を書かない限り大丈夫だと思います)。ただ、出すのなら[[w:Wikipedia:検証可能性]]に沿ったものの方がいいですね。
::::次にすじにくシチューさんへの返信になりますが、烏滸がましいのを承知で言わせていただきますと「JAWPの[[User:ぱたごん|ぱたごん]]さんがどうこうというのは不適切であると考えます。Wikibookshあまだ方針の整備が追いついていないので,Wikipediaなどの関連文書を読んでみてはいかがでしょう。--[[利用者:スタリオン箕浦|スタリオン箕浦]] <span style="font-family:Times"><small>([[利用者・トーク:スタリオン箕浦|会話]]/[[特別:投稿記録/スタリオン箕浦|投稿記録]]/[[特別:Log/スタリオン箕浦|ログ]]/[[特別:メール送信/スタリオン箕浦|メール]])</small></span> 2022年5月9日 (月) 12:57 (UTC)
:::::いやー私は出典の話はこの問題の本質ではないと思う。出典がどうのというのはすじにく氏が防戦のカードとして出しているだけで,全く重要な問題ではないと思っています。私とすじにく氏との戦いは,まず私がすじにく氏の文章の多くは不適切で,良くないものであり,こういうものをここのコンテンツとして表示しておきたくない,と,そう考えているのがスタートです。だから,まず自分自身で書き変える,上書きするし,一方でトークページで文句を言う。すじにく氏は私のその攻撃に対して,防戦,ディフェンスしているわけですね。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月9日 (月) 16:26 (UTC)
*{{RFB|中立}}
横から失礼するよ。
両名一連の流れすべてを追ってるわけじゃないですが、あなた(Honooo)一時期やたらと更新履歴の一覧で目立ってた人だよね?今議題に上がってるすじにく氏以外にも、以前音階カテゴリの執筆してた方(ice氏)のトークページに「権威的な執筆でなんかムカつくし不快」ってコメントされてましたよね?
今あなたの中で最優先の目の上のたんこぶはすじにく氏なのでしょうが、仮にあなたの要望が受理されて彼がブロックされたとしても、またすぐ他の利用者にイラついて次々と標的を変えるだけのような気がしているよ。私もスタリオン氏と同じ中立の立場から述べるけど、安易にこの受諾は飲むべきではないと判断してる。(だからといってすじにく氏の肩をもってるわけじゃないから誤解なきよう)
過去の編集履歴やプロフ覧から見るに、音楽カテになんの造詣もなさそうなあなたからいきなり難癖つけるような人がいる方があまりいい気分ではないですよ。あなたに対して萎縮してwikibooksの書き込みや利用者が減ってしまったら、ますます利用者が減ってしまう。履歴もたどってみたけど、この音楽カテのIce氏以外にも何かにつけてすぐ他人のトークページ来ていちゃもんつけてくるって普通にこわいし不信感しか残さないって思わない?
Webの自由参加型のコミュニティなんだから、いろんな人がいるってこと前提でみんな利用してるよ。そりゃ自分とぜんぜん違う立場で書く人だっている。中には気に入らない意見や内容だってあるさ。でもそれでいちいちキレ散らかしたり、ブロック依頼なんて提出してるかね?いちいち気に入らない認定した人をこうやって攻撃するって普通に他の人が動きづらくなる。その事をもう少し理解してほしい。
上に書かれてる理由も「単に俺が気に入らんから」の一点張りで、第三者にすじにく氏の文章のどこがwikiガイドラインに沿った時に抵触してるのか納得できる説明になってない。まずはそこをあなたの感情抜きで理路整然と書かなきゃ誰も納得なんてできない。あなたが気に入らないからじゃなくて、wikiのガイドラインや明文化された規則に照らした時の問題点を列挙してなきゃ管理者権限持つ人間も動けない。
それができないんだとしたら、その主張は本当にあなたの個人的な癇癪にすぎなかった、ってことだからそもそもここに書くべきじゃない。[[利用者:沼雲バーガー|沼雲バーガー]] ([[利用者・トーク:沼雲バーガー|トーク]]) 2022年5月11日 (水) 15:34 (UTC)
:うーん,貴方の論点は非所に重要な事だと思うから,いずれもう一度じっくり考えてから返答するけど,とりあえずいくつかの言い訳はさせてもらう。まず,ice氏に関しては,私はあの時,この人物ってすじにく氏と同一人物じゃないのかなって思ったんだよね。まあよく考えてみると,今では違うと思っているけど…。それに音楽について<del>に</del>は好きだしそこそこ知っているよ,知っているうえで批判したんだけど…。私はすじにく氏は大問題を持っている人だと思うけど,本当の意味で消し去りたいと思っているわけではない。はっきり言ってすじにく氏以上の不適切な人は今後現れないと思っている。あと,京大の連中にも絡んだけど,そしてこの人は明らかにすじにく氏ではないけど,この人の文章,そしてその周りで面白がってはしゃいでる連中の悪質さは絶望的だと思うけどね。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 16:13 (UTC)
:んー,いろんな人がいる前提でみんな書いているってほんとかね? 結局多数派のあんたらの主張がごり押しで毎日通ってない? エキセントリックな人はみんなあんたらの虐めで消されていないかね? あんたらが状況に乗じて汚いことを毎日し続けるのが自由なら,俺が切れまくって,絡みまくるのも自由じゃあない?^^。とはいえ俺は節度を持ってやっているつもりなんだけどね。とはいえこの話はかなり難しい厄介な話だね。もうちょっと考えてみるよ…。逆にあんたが個人的なうっぷん書いてるだけかもよ。俺みたいな変な奴がいるとここで書きづらいって事でしょ?そう思う奴がいっぱいいれば,みんながみんながって言えるんだろうけど,何かインチキだよね。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 17:00 (UTC)
:皆様、[[w:WP:EQ]]をご覧ください。--[[利用者:スタリオン箕浦|スタリオン箕浦]] <span style="font-family:Times"><small>([[利用者・トーク:スタリオン箕浦|会話]]/[[特別:投稿記録/スタリオン箕浦|投稿記録]]/[[特別:Log/スタリオン箕浦|ログ]]/[[特別:メール送信/スタリオン箕浦|メール]])</small></span> 2022年5月12日 (木) 01:46 (UTC)
それならあなたの一方的な思い込みで名指しで八つ当たりされて火の粉を振りかけてしまったIce氏に対して、思い込みが解消された時点でせめて一言詫びを入れるのが最低限の礼儀ってもんでしょう。部屋を自分で散らかしておいて後は知らんぷりってどこの大名殿かと言わんばかりの傍若無人とは思わんかね?
あともう一つ。いきなりこっちをあんたら呼ばわりでひとくくりにして、「日々汚いことしてる」呼ばわりとはいくらなんでも失礼すぎないかね?
現トピックスのすじにく氏、音階カテのIce氏、そしてあなたがさっき話題に出した京大関係者?、極めつけは中立票を投げた私。次から次へと牙をむいてあれも敵だこれも悪だなんて言って、少々無様が過ぎるってもんだ。
これは自分の感想だが、自分で自分を狂人呼ばわりするヤツってのは大抵ニセモノだと思ってるよ。逃げ口上の一種くらいにしか思わないしセンスも感じたことは無い。京大がなぜここで出てきたのかよく分からんが、毎年テレビや動画でニュースになってる京大の卒業式にだって自称変人アピールのしょうもない人間なら掃いて捨てるほどいるしくだらないと思っているよ。あなたが京大卒だろうがなかろうがどうでもいいが、学歴を伝家の宝刀みたいに後生大事に忍ばせてても、数年もしないうちに錆びて使い物にゃなりゃあせんよ。[[利用者:沼雲バーガー|沼雲バーガー]] ([[利用者・トーク:沼雲バーガー|トーク]]) 2022年5月11日 (水) 17:49 (UTC)
:うーん,お前滅茶苦茶だな。お前みたいなやつの相手するほど俺は暇じゃあないんだよ。とりあえずここで何が起こっていたか,もうちょっと時間かけて読んでみろよ。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 17:55 (UTC)
:ほんとの偽物はお前。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 17:56 (UTC)
:中立って言えば礼儀正しいわけではない。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 17:57 (UTC)
:失礼じゃあないよ,実際お前みたいなやつ,毎日汚い事以外一切してないだろ?--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 17:58 (UTC)
:多少の喧嘩はどこでもある。それに正義ぶって介入して威張ってるお前が一番糞。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 18:00 (UTC)
:謝れ謝れってやたら云うけど,お前は本当に謝るべきこと謝ってるか?--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 18:03 (UTC)
:学歴どころか,お前は存在自体が腐ってさびて,偽物で糞。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 18:04 (UTC)
:お前だってセンスどん底だろ?^^;;;;--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 18:06 (UTC)
:敵だなんて思ってないよ。はっきりいて詰まらん奴らで眼中にない。ただ不愉快極まりないので文句言ってるだけ。京大,すじ肉,あんた,こいつらは糞だから全く興味ないけど,ice氏には少し興味ある。でも謝る必要は無いだろう。そこそこ意味ある指摘だし批判だと思うけど…。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 18:10 (UTC)
:あとこれは大した重要な事ではないんだけど,例えば葛飾北斎なんて,彼は自分を狂老人と名乗っていたんだけど,彼も偽物だと思う?--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 18:15 (UTC)
:あ,画狂老人か…。誰かほかに,自分がキチガイだと言及していた著名人いなかったかなー--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 18:18 (UTC)
:大体逃げない俺は偉いなんて思ってる奴が一番下らんね。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 18:26 (UTC)
:大体自称変人アピールの人間だって,お前よりははるかに素晴らしい人だろう。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 18:35 (UTC)
:大体極めつけが私って…何でお前が一番偉いことになってるの? お前が一番この場で糞なんだよ?--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 18:57 (UTC)
:それにさーはっきり言わせてもらうけど,本当の狂人はお前なんだよ? 気づいていた?^^--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月11日 (水) 19:03 (UTC)
:: 正直なところ依頼者の書いた文章群をちゃんと読んで(私は読む気なくしました)コメントしている被依頼者には敬意を表したいところですが、この連投を見て擁護する気が萎えました。IPなので投票権はありませんが「依頼者・被依頼者双方ブロック」が一番妥当な結論だと考えています。--[[特別:投稿記録/240F:7A:EA2E:1:7865:36BF:53E8:693E|240F:7A:EA2E:1:7865:36BF:53E8:693E]] 2022年5月15日 (日) 09:45 (UTC)
:::↑そうかなー。俺は明らかにここでは,沼の底ハンバーガーの方が120%悪いと思うけど…。まあブロックされるならされるでしょうが無いけどね。でもブロックっていうんなら、このハンバーガーを先にブロックすべきだな。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月15日 (日) 14:04 (UTC)
先日のトークページの差し戻しでこちらも燃料を注いでしまったようです。
念のため意見表明をしておきます。
私があなた(H氏)に懐疑的(不快)な印象をもったのは二年前の一件からです(あなたの記憶に
残っているかは知りませんし今さら蒸し返す気もありません)。
そして最初にことわっておきますが、'''私はすじにくシチュー氏(以下S氏)の支持者、擁護者でもなければ断じて本人によるなりすましでもありません'''。
ウィキペディアで彼が引き起こした騒動の渦中に私は居合わせておりましたし、強権的な彼(S氏)には物書きのはしくれを名乗る資格すら無いと思っています。
私があなた(H氏)に釘をさしたのは、当時私に投げてよこしたあなたの態度、言葉と何一つ変わらないことが形を変えてここで行われていたからです。
私に言わせればS氏とH氏はもはや第三者のユーザー目線では同類です(以前ではS氏の方がはるかに不快でしたが
今では両氏の間に違いを感じません)。
スタリオン氏やバーガー氏のように情状酌量を匂わせる立場からではなく、私も'''S氏とH氏の双方ブロック'''(一定期間)が落としどころだと思います。
[[利用者:DS3techcan|DS3techcan]] ([[利用者・トーク:DS3techcan|トーク]]) 2022年5月15日 (日) 14:39 (UTC)
:まあそれで落とすんなら落とすんでいいけど,貴方もそんな正当な人間かね? たとえどんな理由があろうと,ほんとのアカウントでその意見を書くべきではないかね?あと2年前って何かね?できればもっとはっきり教えてほしいけど。椎楽氏にも書いたけど,私はすじにく氏と同類で全く構わないよ。でもね,あんたも同じだよ。何も偉くない。おそらく貴方は高校生かね。それとも誰だろう?仕方ない,ちょっと調べてみるか…--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月15日 (日) 14:47 (UTC)
:或いは,Aaさんかねー。でもやっぱりあなたが誰かはっきりさせてもらわないと,この問題は解決しないよ。トークページ荒らされるってよくあなた方書くんだけど,私としては正当な意見表明してるだけのつもりなんだけど…--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月15日 (日) 14:55 (UTC)
:うーん,いろいろ考えてみたんだけど,やはり貴方がやるべきことは,その2年前の件を蒸し返すことだと思う。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月15日 (日) 16:00 (UTC)
:横から失礼します。
:DS3techcanさんがすじにくシチュー氏のなりすましないし、擁護者であると誤解しましたこと、この場を借りてお詫び申し上げます。
:大変失礼いたしました。--[[利用者:椎楽|椎楽]] ([[利用者・トーク:椎楽|トーク]]) 2022年5月16日 (月) 15:03 (UTC)
着火剤ってのはどこに転がってるか分かったもんじゃあないね。キャンプ場に投棄された手ごろな角材だったらば用心もしたが、落ちてるとこには落ちてるもんだ。キャンプってのはここWMPコミュニティとある意味で同じだ。どっちも合意と取り決められた規則で形成された公共の場だな。焚き付けて喰っちまおうってのはいただけない。
それはさておきここのトピックスはなんだい? 画伯の威を借りてまで自分を狂人に見立てたくて必死なのにはお見それしたが、感情まかせに手前が撒いた種の不始末もできねえでどうするよ?トピックス冒頭ですじにく氏が言う「詐称」ってのもあながち的外れな指摘ではないのかもな。こちらが聞いてもないのに京大関係者との確執を持ち出すわ、画伯を嵩にかかって自称変人のアピールにこだわりたがるわ、とにかく自分を大層な人物に仕立て上げたいのはとりあえず伝わる内容だったよ。
WMPっていうでっかい傘の下に入ってみなさんと並んだのはあんたの意思よ。そのわりに狂人めかして傘の柄を握るのは自分だみたいなおかしな振る舞いをなさっておられるようだから、怒りまかせにブロック依頼を出す、自分様の意にそぐわぬ書き込みは抹消されねば気が済まぬ、上書き差し戻しと思いのまま。こりゃあ管理者様も真っ青だ。さぞかし手を焼いておられよう。
公益性を私欲が喰っちまってる。そうと知らずに焚き付けたこっちに非はあっだが、誰が手をかざしたってあんたはきっとそうだろうさ。燃え広がって誇示とナワバリ。高く燃えて横に広がろうとする。あんたに諸々の自覚は一生宿らんだろうさ。あんたがひとくくりに見下してかかった「みんな」に今までのように煙たがられながら、手前で焼野原にした禿山で最後は火種を失うがいいさ。わざわざ見届ける気はないんで、これで失礼させてもらうとするよ。[[利用者:沼雲バーガー|沼雲バーガー]] ([[利用者・トーク:沼雲バーガー|トーク]]) 2022年5月12日 (木) 02:20 (UTC)
:ハイハイ,偉い偉い,さようならインチキ君(^^)凸--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月12日 (木) 02:27 (UTC)
:人生一回限り,破滅するならするでそれも人生じゃあない? あんたみたいに一生愚か者のままただ集団化する手管だけ持って,インチキな人生送ってインチキに生きていくより,破滅人生の方が100倍価値あるかもよ?--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年5月12日 (木) 02:38 (UTC)
::'''皆様、[[w:WP:EQ]]をご覧ください。'''ヒートアップしているのではないでしょうか。--[[利用者:スタリオン箕浦|スタリオン箕浦]] <span style="font-family:Times"><small>([[利用者・トーク:スタリオン箕浦|会話]]/[[特別:投稿記録/スタリオン箕浦|投稿記録]]/[[特別:Log/スタリオン箕浦|ログ]]/[[特別:メール送信/スタリオン箕浦|メール]])</small></span> 2022年5月12日 (木) 05:39 (UTC)
9omlul5r0so40rp1v32zzi9e7hoyocd
Wikibooks:投稿ブロック依頼/すじにくシチュー 20220122
4
34121
205686
198353
2022-07-22T16:31:20Z
Honooo
14373
削除テンプレート外したうえで、ブロックトップから呼び出します。非常に構造が悪い上、指定版削除はそれほど重要では無く思われる。
wikitext
text/x-wiki
==== {{User2|すじにくシチュー}} ====
[[Wikibooks:コメント依頼/すじにくシチュー]]も参照してください。--[[利用者:スタリオン箕浦|スタリオン箕浦]] <small>([[利用者・トーク:スタリオン箕浦|会話]]/[[特別:投稿記録/スタリオン箕浦|投稿記録]]/[[特別:Log/スタリオン箕浦|ログ]]/[[特別:メール送信/スタリオン箕浦|メール]])</small> 2022年5月8日 (日) 05:21 (UTC)
===== 依頼理由 =====
この人の執筆態度、文章自体大問題だよ。改善させる気一切ないみたいだから、もうブロックしたら?それともこの人が主張する通り、この人の考え方が多数派で、正しい考えなの?--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年1月22日 (土) 10:17 (UTC)
昔笑っていいともで皿洗うのが凄く速いなんて言ってた人がいて実演してたけど,劇団ひとりが全然洗えてないじゃんって突っ込んでた。この人の動かす手なんて何の意味もないよ。この人のインチキな暴論の大量書き込み,ほんとに放置しておいていいのかね?--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年1月22日 (土) 10:46 (UTC)
どうも私が思うに,この人物は多重アカウントを使いこなしているのではないだろうか。証拠はないし,証拠を暴き立てることもかなり困難だろう。だから告発もしないけど,意外と多くのアカウントが同一人物のような気がするし,しかもそれが構造的に許されてるような気もする。だから実際には対処できない。お手上げだね^^;;;;--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年3月1日 (火) 17:55 (UTC)
或いは…この人と管理者も巻き込んだ,何らかの排外的で場合によっては平気で汚い事もするコミュニティがあるって事かな…。結局よくわからない(?_?)??。どっちにしろお手上げだよ~~--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年3月1日 (火) 18:13 (UTC)
やはり管理者もあまり信頼できないな。私のアクセス状況をガンガン記録して,場合によっては恫喝や裁判資料として使う気満々ってところか…--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年3月1日 (火) 18:21 (UTC)
でもよく考えたらすじにく氏も管理者の悪口書いていたし,管理者も一人ではない。ウィキメディア財団という大元もあるんだろう…。結局何がどうなってるか,全く分からんよ^^;;;。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年3月1日 (火) 19:09 (UTC)
===== 依頼者のコメント =====
===== 被依頼者のコメント =====
===== 投票、コメント =====
*{{RFB|中立}} [[Wikibooks:コメント依頼/すじにくシチュー]]が終わってからでいいのではないでしょうか(ウィキブッキアン自体が少ないので,コメントもそこまで集まらないとはおもいますが)。なお、追記になりますが,今のところ[[WB:投稿ブロック依頼]]にこの依頼を呼び出してはいません(sdまで呼び出されてしまうため)。--[[利用者:スタリオン箕浦|スタリオン箕浦]] <small>([[利用者・トーク:スタリオン箕浦|会話]]/[[特別:投稿記録/スタリオン箕浦|投稿記録]]/[[特別:Log/スタリオン箕浦|ログ]]/[[特別:メール送信/スタリオン箕浦|メール]])</small> 2022年5月8日 (日) 09:19 (UTC)
::削除テンプレート外したうえで、ブロックトップから呼び出します。非常に構造が悪い上、指定版削除はそれほど重要では無く思われる。どうしても版削除が必要だと考えるなら、管理者に直接申請してください。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年7月22日 (金) 16:31 (UTC)
3m6chmu37v0l05sbkcwbg9w3qmshr22
205697
205686
2022-07-22T21:18:10Z
Honooo
14373
/* 依頼者のコメント */
wikitext
text/x-wiki
==== {{User2|すじにくシチュー}} ====
[[Wikibooks:コメント依頼/すじにくシチュー]]も参照してください。--[[利用者:スタリオン箕浦|スタリオン箕浦]] <small>([[利用者・トーク:スタリオン箕浦|会話]]/[[特別:投稿記録/スタリオン箕浦|投稿記録]]/[[特別:Log/スタリオン箕浦|ログ]]/[[特別:メール送信/スタリオン箕浦|メール]])</small> 2022年5月8日 (日) 05:21 (UTC)
===== 依頼理由 =====
この人の執筆態度、文章自体大問題だよ。改善させる気一切ないみたいだから、もうブロックしたら?それともこの人が主張する通り、この人の考え方が多数派で、正しい考えなの?--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年1月22日 (土) 10:17 (UTC)
昔笑っていいともで皿洗うのが凄く速いなんて言ってた人がいて実演してたけど,劇団ひとりが全然洗えてないじゃんって突っ込んでた。この人の動かす手なんて何の意味もないよ。この人のインチキな暴論の大量書き込み,ほんとに放置しておいていいのかね?--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年1月22日 (土) 10:46 (UTC)
どうも私が思うに,この人物は多重アカウントを使いこなしているのではないだろうか。証拠はないし,証拠を暴き立てることもかなり困難だろう。だから告発もしないけど,意外と多くのアカウントが同一人物のような気がするし,しかもそれが構造的に許されてるような気もする。だから実際には対処できない。お手上げだね^^;;;;--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年3月1日 (火) 17:55 (UTC)
或いは…この人と管理者も巻き込んだ,何らかの排外的で場合によっては平気で汚い事もするコミュニティがあるって事かな…。結局よくわからない(?_?)??。どっちにしろお手上げだよ~~--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年3月1日 (火) 18:13 (UTC)
やはり管理者もあまり信頼できないな。私のアクセス状況をガンガン記録して,場合によっては恫喝や裁判資料として使う気満々ってところか…--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年3月1日 (火) 18:21 (UTC)
でもよく考えたらすじにく氏も管理者の悪口書いていたし,管理者も一人ではない。ウィキメディア財団という大元もあるんだろう…。結局何がどうなってるか,全く分からんよ^^;;;。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年3月1日 (火) 19:09 (UTC)
===== 依頼者のコメント =====
なんとなく不適切、おかしいと書くんじゃなくて、ちゃんとルールにのっとって訴追せよという意見もあったので、少しだけ、簡単に書いておきます。そうですね、ウィキペディアのルールの多くにもこの人物は抵触していると思うけど、私があえて指摘するとすると、コミュニティを疲弊させる利用者(ただ、個人的にはこれで他者をあまり非難したくはない。基本的にはコミュニケーションは疲れるものだからね)、そしてひょっとしたら有償の寄稿者にも抵触してるのでは、などと思う。そして、コメント欄と、!-- コメントでの暴言は断固やめろと言いたい。ある程度の不適切発言はありだと思うが、この人物の暴言は殺傷力が異常に高いので、自覚して控えるべきだと思う。そして本来この人物の訴追には、ウィキペディアのルールよりは、最新の、知的に偏向したそして特異部分だけ強固な論理構造を身に着けた、自覚はないのだろうが、多くの機会で他者に対するハラスメントを行使している不適切利用者に対処するために議論された、ユニバーサル行動規範によって告訴するのが妥当だと思う。ただ一応この指摘は書いておきますが、私がこの後その方針でこの人物を訴追して断罪するかどうかは、今のところ未定です。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年7月22日 (金) 21:18 (UTC)
===== 被依頼者のコメント =====
===== 投票、コメント =====
*{{RFB|中立}} [[Wikibooks:コメント依頼/すじにくシチュー]]が終わってからでいいのではないでしょうか(ウィキブッキアン自体が少ないので,コメントもそこまで集まらないとはおもいますが)。なお、追記になりますが,今のところ[[WB:投稿ブロック依頼]]にこの依頼を呼び出してはいません(sdまで呼び出されてしまうため)。--[[利用者:スタリオン箕浦|スタリオン箕浦]] <small>([[利用者・トーク:スタリオン箕浦|会話]]/[[特別:投稿記録/スタリオン箕浦|投稿記録]]/[[特別:Log/スタリオン箕浦|ログ]]/[[特別:メール送信/スタリオン箕浦|メール]])</small> 2022年5月8日 (日) 09:19 (UTC)
::削除テンプレート外したうえで、ブロックトップから呼び出します。非常に構造が悪い上、指定版削除はそれほど重要では無く思われる。どうしても版削除が必要だと考えるなら、管理者に直接申請してください。--[[利用者:Honooo|Honooo]] ([[利用者・トーク:Honooo|トーク]]) 2022年7月22日 (金) 16:31 (UTC)
jj1htll0rx6enr7lj79fzcv6msuhm00
高校英語の文法/動詞と文型
0
35052
205690
204373
2022-07-22T20:06:45Z
すじにくシチュー
12058
/* SVO(第3文型) */ apologize to ~(人) 「~に謝罪する」、
wikitext
text/x-wiki
=== 文型 ===
英語の文型は基本的には、下記の5通りに分かれる。
「第1文型」と呼ぶ代わりに「SV文型」、第2文型と呼ぶ代わりに「SVC文型」のようにいう場合もある。なので、高校生としては、どの文型が何番だったかまでは覚える必要は無い。
==== SV(第1文型) ====
主語 + 動詞
※ 未記述.
==== SVC(第2文型) ====
主語 + 動詞 + 補語
がSVC文型である。
第2文型は
# Mary ''is'' '''happy'''.
# John ''became'' '''a doctor'''.
などである。
SVC文型を取る典型的な動詞がある。
become(なる)、 turn(変化して~になる), go (~(悪い状態に)なる)
のように、~になるという意味の動詞に多い。
The leaves turn red in the fall. 「秋になると、木の葉は赤くなる。」
leavesは必ずしも樹木の葉とは限らず、草の葉の場合もあるが、しかし市販の参考書などでは、これでも通じている。
The milk has gone bad. 「その牛乳は腐っている。」
などである。go は完了形で使うことが多い。
ほか、be動詞や、外見的な様子をあらわす look(のように見える), appear(~のように見える)、seem (~のように見える)
なども典型的にSVC文型である。
She is happy. 「彼女はしあわせだ。」
She looks happy. 「彼女はしあわせそうに見える。」
She appears happy. 「彼女はしあわせそうだ。」
などである。
She seems happy. 「彼女はしあわせなように見える。」
知覚を表す、feel(感じられる), smell(においがする), sound(聞こえる),taste(味がする)、なども、典型的な第2文型をとることの多い動詞である。
そのほか、熟語 be fond of ~ 「~が好きである」や be sure of ~「~を確信している」のように、形式的にはSVC文型だが、続く修飾語がないと意味をなさない言い回しもあるが、便宜的にこういった熟語表現でも形式的にSVC文型でさえありさえずれば、分類上はSVC文型として分類する。
ほか、教育上の注意として、よく便宜的に<nowiki>S = C</nowiki>と等号を使って比喩的に教育される場合もあるが、しかし数学の等号とは異なり、一般にSとCの単語のそれぞれの位置は交換できないことに教育者は気をつけておく必要がある。
==== SVO(第3文型) ====
主語 + 動詞 + 目的語
の文型がSVO文型である。
文法上は、一般にSVO文型を取る動詞は通常、他動詞である。
多くの動詞がSVO文型に該当するので、覚えるなら、他の文型と間違いやすいものを覚えると良い。
たとえば「議論する」discussは、よく間違いでabout を付けられる場合があるが、しかしaboutを使わずにSVO文型でdisucussは使う動詞である。
discuss はもともと「粉々にする」というような意味であり(ジーニアス英和)、それが転じて、話を分解するような意味になったので、なのでabout はつけない。
このような、前置詞をつけない他動詞を列挙すると、
approach(~に近づく)、attend (~に出席する), discuss(~について話し合う)、enter(~に入る)、join (~に参加する)、marry(~と結婚する)、resemble(~に似ている)、visit (~を訪問する)
などが、参考書では代表的である。
ほかに、前置詞をつけない動詞の例としては
contact (~と連絡をとる)※ジーニアス、
mention (~を述べる)※インスパイア、ジーニアス、
oppose (~に反対する)※エバーグリーン
などがある。
逆に本来なら前置詞が必要なのにそれを忘れやすい動詞としては
agree with ~(人) 「~に賛成する」、 ※ ブレイクスルー、エバーグリーン
agree to 案 「<案>に賛成する」、※ エバーグリーン
complain to 人 about 関心事 「<人>に<関心事>について不平を言う」 ※ ブレイクスルー、エバーグリーン
complain の「to 人」は省略しても構わない(ブレイクスルー)。
apologize to ~(人) 「~に謝罪する」、
たとえば
You should apologize to her. 「きみは彼女に謝罪するべきだよ。」 ※ エバーグリーン
I must apologize to her. 「私は彼女に謝罪しなければならない。」※ 青チャート
suggest 情報 to 人 「<人>に<情報>を提示する」、
同様に introduce も、
introduce 人1 to 人2 「<人2>に<人1>を紹介する」
である(青チャート、インスパイア)。<人1>のほうが紹介される情報になる。
ほか、
graduate from 学校「<学校>を卒業する」 ※日本語の「学校『を』」に引きずられて from を忘れる生徒が多いと言われている(ジーニアス)。
などがある(青チャート、インスパイア)。
そのほか、
live a happy life 「しあわせな生活を送る」
のように、動詞と関連の深い目的語を取る例もある(青チャート、ジーニアス)。
==== SVOO(第4文型) ====
SVOO文型とは、
主語 + 動詞 + 目的語1 + 目的語2
である。なお、
主語 + 動詞 + 間接目的語 + 直接目的語
のようにも言う参考書も多い。
「~(人など)に○○(物など)を与える」という意味の基本的な動詞には、SVOO文型の用法をもつものが多い。
典型的なのは giveであり give O1 O2 で「O1にO2を与える」だが、そのほかにも hand (手渡す)や、offer (手渡す)など、和訳上では「与える」とは限らないので、意外と注意が必要である。sell 「売る」もこのグループである。
そのほか、物理的には物を渡さなくても、teach O1 O2 (O1にO2を教える)や 、tell O1 O2 (O1にO2を話す)や write O1 O2 (O1にO2(手紙など)を書く)といった、相手のもとに情報を届けるものにも、SVOO文型の用法がある。
この、相手のもとに何かを届けるグループのものは、前置詞 to を使った言い換えで、たとえば give the money to him のように表現できるものが多い。
列挙すると、
give(与える) , lend (貸す), hand (手渡す), offer (提供する), show (見せる), send (送る), tell (伝える・話す), write ((手紙などを)書く),
などがある。
ほか、他人のために何かを「してあげる」という意味の動詞にも、SVOO文型のものが多い。
具体的には、buy 「買ってあげる」、cook 「料理を作ってあげる」や find 「見つけてあげる」や、get O1 O2 (O1のためにO2を手に入れる), make (作ってあげる)という用法をもつ動詞が、SVOO文型の用法をもつ。
この、「してあげる」グループの動詞は、前置詞を使った言い換えでは、to ではなく for のほうが適切な場合が多い。
buy a new bike for him. 「新しい自転車を買ってあげる」
などのように。
buy (買う), cook(料理する), make(作る), play(演奏する), sing (歌う)、が、
もし前置詞で言い換えるならそのforのほうが適切なグループである。
;そのほかのグループ
bring「持ってくる」 とleave「残す」は、to でも for でも、SVOOでも、どれでも使える。
bringの場合で、前置詞を使う場合は、文脈から to か for かより適切なほうを判断する。
leave の場合、慣用的に、財産を残して死ぬ場合は to を、ケーキやクッキーなどを人に残しておくのは for である。
I left some cake for him. 「私は彼にケーキを少し残しておいた。」
He left a fortune to his wife. 「彼は妻に財産を残して死んだ。」
;to や for で言い換えできないグループ
cost, envy(うらやましく思う), save(節約する), spare(省く) , は、SVOO文型の用法はあるが、しかし一般に to や for を使った言い換えは出来ないし、またそのためO1とO2の語順も変えられない。
==== SVOC(第5文型) ====
主語+動詞+目的語+補語
SVOC文型では、O = C の関係が成立する。
make O C 「OをCにさせる」がSVOCの一例である。
call 「~と呼ぶ」や name「~と名づける」など、何かを呼ぶ表現がSVOCである。
ほか、elect O C で 「OをCに選ぶ」だが、しかし類義語の choose は伝統的にはSVOC文型にはならない事に注意する必要がある。ただし、最近は事情が異なり、 choose でも SVOC文型を取る場合もあるので(ロイヤル英文法)、複雑である。
leave「残しておく」や keep「~にしておく」など、現状維持の意味の動詞でも、用法によっては SVOC の場合もある。
そのほか、「~を・・・と思う」グループとして、believe「OをCと信じる」、consider「OをCと見なす」, find「OがCだと分かる」, think 「OをCと思う」などがある。
I believe him a great artist. 「私は彼を偉大な芸術家だと思う。」
I consider him a great artist. 「私は彼を偉大な芸術家だとみなしている。
なお、regard 「見なす」は、このタイプ'''ではなく'''、前置詞 as が必要である(桐原フォレスト、大修館総合英語)。
regard A as B で、「AをBだと見なす」
たとえば、 regard her as our leader で、「彼女を私たちのリーダーだとみなす」である。
===== 主語と述語動詞の構文 =====
====== have 過去分詞 ======
'''I''' ''have'' my teeth '''cleaned'''.(私は歯を磨いてもらっている)
ここでは、<code>have=させる(依頼)</code>である。主語(I)と述語動詞(cleaned)が対応している関係になっている。つまり、I cleaned というふうに組み合わせて文法的に正解であれば、このhave 過去分詞の構文は正解である。
==== there構文など ====
There is ~ や There are ~ といった、いわゆるthere構文は、これをSV文型とみる解釈と、SVC文型とみる解釈とがある。
冒頭の there をS と解釈すれば SVC文型という解釈になる。
冒頭の there を M(修飾語)と解釈すれば、SV文型という解釈になる。
このため、there 構文は5文型による分類からは独立した特殊な構文であると考えられている。
ほか、it seems 「~のように見える」など形式主語 it を使った文章も、例外的なものだとして、文型の分類からは除外されることが多い。
6l8p601u89an0s9bsuwnnltrgn7cn11
205691
205690
2022-07-22T20:13:27Z
すじにくシチュー
12058
wikitext
text/x-wiki
=== 文型 ===
英語の文型は基本的には、下記の5通りに分かれる。
「第1文型」と呼ぶ代わりに「SV文型」、第2文型と呼ぶ代わりに「SVC文型」のようにいう場合もある。なので、高校生としては、どの文型が何番だったかまでは覚える必要は無い。
==== SV(第1文型) ====
主語 + 動詞
※ 未記述.
==== SVC(第2文型) ====
主語 + 動詞 + 補語
がSVC文型である。
第2文型は
# Mary ''is'' '''happy'''.
# John ''became'' '''a doctor'''.
などである。
SVC文型を取る典型的な動詞がある。
become(なる)、 turn(変化して~になる), go (~(悪い状態に)なる)
のように、~になるという意味の動詞に多い。
The leaves turn red in the fall. 「秋になると、木の葉は赤くなる。」
leavesは必ずしも樹木の葉とは限らず、草の葉の場合もあるが、しかし市販の参考書などでは、これでも通じている。
The milk has gone bad. 「その牛乳は腐っている。」
などである。go は完了形で使うことが多い。
ほか、be動詞や、外見的な様子をあらわす look(のように見える), appear(~のように見える)、seem (~のように見える)
なども典型的にSVC文型である。
She is happy. 「彼女はしあわせだ。」
She looks happy. 「彼女はしあわせそうに見える。」
She appears happy. 「彼女はしあわせそうだ。」
などである。
She seems happy. 「彼女はしあわせなように見える。」
知覚を表す、feel(感じられる), smell(においがする), sound(聞こえる),taste(味がする)、なども、典型的な第2文型をとることの多い動詞である。
そのほか、熟語 be fond of ~ 「~が好きである」や be sure of ~「~を確信している」のように、形式的にはSVC文型だが、続く修飾語がないと意味をなさない言い回しもあるが、便宜的にこういった熟語表現でも形式的にSVC文型でさえありさえずれば、分類上はSVC文型として分類する。
ほか、教育上の注意として、よく便宜的に<nowiki>S = C</nowiki>と等号を使って比喩的に教育される場合もあるが、しかし数学の等号とは異なり、一般にSとCの単語のそれぞれの位置は交換できないことに教育者は気をつけておく必要がある。
==== SVO(第3文型) ====
主語 + 動詞 + 目的語
の文型がSVO文型である。
文法上は、一般にSVO文型を取る動詞は通常、他動詞である。
多くの動詞がSVO文型に該当するので、覚えるなら、他の文型と間違いやすいものを覚えると良い。
たとえば「議論する」discussは、よく間違いでabout を付けられる場合があるが、しかしaboutを使わずにSVO文型でdisucussは使う動詞である。
discuss はもともと「粉々にする」というような意味であり(ジーニアス英和)、それが転じて、話を分解するような意味になったので、なのでabout はつけない。
このような、前置詞をつけない他動詞を列挙すると、
approach(~に近づく)、attend (~に出席する), discuss(~について話し合う)、enter(~に入る)、join (~に参加する)、marry(~と結婚する)、resemble(~に似ている)、visit (~を訪問する)
などが、参考書では代表的である。
ほかに、前置詞をつけない動詞の例としては
contact (~と連絡をとる)※ジーニアス、
mention (~を述べる)※インスパイア、ジーニアス、
oppose (~に反対する)※エバーグリーン
などがある。
逆に本来なら前置詞が必要なのにそれを忘れやすい動詞としては
agree with ~(人) 「~に賛成する」、 ※ ブレイクスルー、エバーグリーン
agree to 案 「<案>に賛成する」、※ エバーグリーン
complain to 人 about 関心事 「<人>に<関心事>について不平を言う」 ※ ブレイクスルー、エバーグリーン
complain の「to 人」は省略しても構わない(ブレイクスルー)。
apologize to ~(人) 「~に謝罪する」、
たとえば
You should apologize to her. 「きみは彼女に謝罪するべきだよ。」 ※ エバーグリーン
I must apologize to her. 「私は彼女に謝罪しなければならない。」※ 青チャート
suggest 情報 to 人 「<人>に<情報>を提示する」、
同様に introduce も、
introduce 人1 to 人2 「<人2>に<人1>を紹介する」
である(青チャート、インスパイア)。<人1>のほうが紹介される情報になる。
ほか、
graduate from 学校「<学校>を卒業する」 ※日本語の「学校『を』」に引きずられて from を忘れる生徒が多いと言われている(ジーニアス)。
などがある(青チャート、インスパイア)。
そのほか、
She '''lived''' a happy '''life'''. 「彼女はしあわせな生活を送った」
のように、動詞と関連の深い目的語を取る例もある(青チャート、ジーニアス)。
ただし普通は、
She lived happily.
のように言う場合が多い(青チャート)。
smile a happy smile 「うれしそうに笑う」、
dream a strange dream 「きみょうな夢を見る」、
などの表現もある(ジーニアス)。
==== SVOO(第4文型) ====
SVOO文型とは、
主語 + 動詞 + 目的語1 + 目的語2
である。なお、
主語 + 動詞 + 間接目的語 + 直接目的語
のようにも言う参考書も多い。
「~(人など)に○○(物など)を与える」という意味の基本的な動詞には、SVOO文型の用法をもつものが多い。
典型的なのは giveであり give O1 O2 で「O1にO2を与える」だが、そのほかにも hand (手渡す)や、offer (手渡す)など、和訳上では「与える」とは限らないので、意外と注意が必要である。sell 「売る」もこのグループである。
そのほか、物理的には物を渡さなくても、teach O1 O2 (O1にO2を教える)や 、tell O1 O2 (O1にO2を話す)や write O1 O2 (O1にO2(手紙など)を書く)といった、相手のもとに情報を届けるものにも、SVOO文型の用法がある。
この、相手のもとに何かを届けるグループのものは、前置詞 to を使った言い換えで、たとえば give the money to him のように表現できるものが多い。
列挙すると、
give(与える) , lend (貸す), hand (手渡す), offer (提供する), show (見せる), send (送る), tell (伝える・話す), write ((手紙などを)書く),
などがある。
ほか、他人のために何かを「してあげる」という意味の動詞にも、SVOO文型のものが多い。
具体的には、buy 「買ってあげる」、cook 「料理を作ってあげる」や find 「見つけてあげる」や、get O1 O2 (O1のためにO2を手に入れる), make (作ってあげる)という用法をもつ動詞が、SVOO文型の用法をもつ。
この、「してあげる」グループの動詞は、前置詞を使った言い換えでは、to ではなく for のほうが適切な場合が多い。
buy a new bike for him. 「新しい自転車を買ってあげる」
などのように。
buy (買う), cook(料理する), make(作る), play(演奏する), sing (歌う)、が、
もし前置詞で言い換えるならそのforのほうが適切なグループである。
;そのほかのグループ
bring「持ってくる」 とleave「残す」は、to でも for でも、SVOOでも、どれでも使える。
bringの場合で、前置詞を使う場合は、文脈から to か for かより適切なほうを判断する。
leave の場合、慣用的に、財産を残して死ぬ場合は to を、ケーキやクッキーなどを人に残しておくのは for である。
I left some cake for him. 「私は彼にケーキを少し残しておいた。」
He left a fortune to his wife. 「彼は妻に財産を残して死んだ。」
;to や for で言い換えできないグループ
cost, envy(うらやましく思う), save(節約する), spare(省く) , は、SVOO文型の用法はあるが、しかし一般に to や for を使った言い換えは出来ないし、またそのためO1とO2の語順も変えられない。
==== SVOC(第5文型) ====
主語+動詞+目的語+補語
SVOC文型では、O = C の関係が成立する。
make O C 「OをCにさせる」がSVOCの一例である。
call 「~と呼ぶ」や name「~と名づける」など、何かを呼ぶ表現がSVOCである。
ほか、elect O C で 「OをCに選ぶ」だが、しかし類義語の choose は伝統的にはSVOC文型にはならない事に注意する必要がある。ただし、最近は事情が異なり、 choose でも SVOC文型を取る場合もあるので(ロイヤル英文法)、複雑である。
leave「残しておく」や keep「~にしておく」など、現状維持の意味の動詞でも、用法によっては SVOC の場合もある。
そのほか、「~を・・・と思う」グループとして、believe「OをCと信じる」、consider「OをCと見なす」, find「OがCだと分かる」, think 「OをCと思う」などがある。
I believe him a great artist. 「私は彼を偉大な芸術家だと思う。」
I consider him a great artist. 「私は彼を偉大な芸術家だとみなしている。
なお、regard 「見なす」は、このタイプ'''ではなく'''、前置詞 as が必要である(桐原フォレスト、大修館総合英語)。
regard A as B で、「AをBだと見なす」
たとえば、 regard her as our leader で、「彼女を私たちのリーダーだとみなす」である。
===== 主語と述語動詞の構文 =====
====== have 過去分詞 ======
'''I''' ''have'' my teeth '''cleaned'''.(私は歯を磨いてもらっている)
ここでは、<code>have=させる(依頼)</code>である。主語(I)と述語動詞(cleaned)が対応している関係になっている。つまり、I cleaned というふうに組み合わせて文法的に正解であれば、このhave 過去分詞の構文は正解である。
==== there構文など ====
There is ~ や There are ~ といった、いわゆるthere構文は、これをSV文型とみる解釈と、SVC文型とみる解釈とがある。
冒頭の there をS と解釈すれば SVC文型という解釈になる。
冒頭の there を M(修飾語)と解釈すれば、SV文型という解釈になる。
このため、there 構文は5文型による分類からは独立した特殊な構文であると考えられている。
ほか、it seems 「~のように見える」など形式主語 it を使った文章も、例外的なものだとして、文型の分類からは除外されることが多い。
qmkvge7hiwzs7plfmqu60zlb0qmg7uy
高校英語の文法/時制
0
35057
205692
204391
2022-07-22T20:47:14Z
すじにくシチュー
12058
歴史的現在
wikitext
text/x-wiki
=== 時制の一致と話法 ===
==== 時制の一致 ====
===== 時制の一致の原則 =====
ジーニアス、ロイヤル英文法にある典型的な例文だが、
「私は、彼が忙しいと思う」 I think that he is busy.
「私は、彼が忙しいと思った」 I thought that he was busy.
これを分析しよう。主節が「思った」と過去形になると、英語では、従属節の意味が「忙しい」と現在形であっても、主節にあわせて he was busy のように動詞が過去形になります。このような現象を「時制の一致」(じせいのいっち)と言います。
時制の一致が起きるのは、主節が過去形または過去完了形の場合だけである。なお、過去完了形については高校で習う。
つまり、現在形・現在進行形および未来時制・未来完了形では、時制の一致は起きない。
なお、過去から見た過去を言い表す場合は、従属節は過去形のままかあるいは過去完了(大過去)になる。参考書ではいちいち分析しないが、「時制の一致」の観点からも、「大過去」を考えることができる。
従属節が未来系であっても、主節が過去形でありさえすれば、時制の一致は起きる。たとえば例文、
「彼が~するだろうと思う」 I think he will ~.
「彼が遅れるだろうと思った。」 I thought he would ~.
である。
===== 時制の一致の例外 =====
従属節で「水は100度で沸騰する」とか「光は音よりも速く伝わる」などの物理法則を習ったとか教わった、とかなどと場合は、習った時点が過去であっても、従属節の時制は現在形である。
これに準じてか、歴史的事実を習ったり知ったりした場合などは、その事実を習ったりした時点が過去であっても、従属節をけっして過去完了形にせず(大過去にせず)、従属節は単なる過去形にする。
また、「彼は毎日散歩をする」とか「彼は毎日ジョギングをする」など、現在も通用している習慣を表す場合、従属節を過去にせず現在形にするのが普通。
ただし、習慣については、必ずしも従属節を必ず現在形にしないといけないわけではなく、惰性的に主節が過去形なら従属節もひきづられて過去形にすることも実際にはよくあるのが現実である(ロイヤル英文法)
ただし、習慣の内容の従属節を過去形にした場合、果たして現在もその習慣が続いているか分からない、という解釈をされるおそれがある。なので高校生向けの英文法参考書などでは、習慣については時制の一致の例外として現在形にするという教育が好まれている。
仮定法の場合も、時制の一致の例外である。
なお、実現しなかった願望を表す意味での仮定法は基本、仮定法過去または仮定法過去完了のどちらか片方である。
これとは別に「仮定法現在」というのがあるが、願望の表現ではなく、かつては条件文などで仮定法現在が使われていた歴史もあったが、しかし古風な表現方法であり、なので21世紀ではあまり使われない。古風な文体を意図的に書く場合などで、仮定法現在を用いる場合もある。
==== 未来 ====
未来の出来事であっても、交通機関の時刻表にもとづく出来事や、カレンダーにもとづく行事などは、確定的な未来であるとして、動詞は現在形で表す。
The flight leaves at 10:30. 「その飛行機は10時30分に出発する。」
ほか、現在進行形で、比較的近い、自身などの予定を表せる。
I'm leaving for Sapporo tomorrow. 「私は明日、札幌に行く予定です。」
I'm visiting Sapporo tomorrow. 「私は明日、札幌に行く予定です。」
上述の現在進行形による予定の表現には、現在その準備や手配を具体的に整えているという含みもある。
be about to ~ 「まさに~が始まろうとしている」
これとほとんど同じ意味で、
be on the point of ~ing
== 現在 ==
=== 一般的事実 ===
The earth goes around the sun. 「地球は太陽のまわりを回っている。」
のように、時間の経過により変化しない真理・一般的事実は、現在形であらわす(ジーニアス、エバーグリーン)。
なお、インスパイアでは、
The moon goes around the earth. 「月は地球のまわりを回っている。」
である。
=== ことわざ ===
ほか、ことわざも現在形が普通。
All roads lead to Rome. 「すべての道はローマに通ず」※ ジーニアス
Practice makes perfect. 「習うより慣れろ」 ※インスパイア
The earky bird catches the worm. 「早起きの鳥は虫を捕らえる。」(「早起きは三文の得」に相当)※青チャート
=== スポーツ実況など ===
John pass the ball to Mike. He kicks to the goal. 「ジョンがボールをマイクにパス。マイク、ゴールへシュート。」
※ 青チャート、インスパイア。
なお、実況放送では、進行の順番どおりに説明していくのが普通(インスパイア)。
その他、「歴史的現在」と言い、小説などで、過去の出来事でも、まるで目の前で起きているかのように、現在形で表す表現技法がある。(※ 青チャート、インスパイア。)
3f99cw3qzmqr5swe2apj9nbn6owpm1o
205694
205692
2022-07-22T20:58:32Z
すじにくシチュー
12058
/* 未来 */
wikitext
text/x-wiki
=== 時制の一致と話法 ===
==== 時制の一致 ====
===== 時制の一致の原則 =====
ジーニアス、ロイヤル英文法にある典型的な例文だが、
「私は、彼が忙しいと思う」 I think that he is busy.
「私は、彼が忙しいと思った」 I thought that he was busy.
これを分析しよう。主節が「思った」と過去形になると、英語では、従属節の意味が「忙しい」と現在形であっても、主節にあわせて he was busy のように動詞が過去形になります。このような現象を「時制の一致」(じせいのいっち)と言います。
時制の一致が起きるのは、主節が過去形または過去完了形の場合だけである。なお、過去完了形については高校で習う。
つまり、現在形・現在進行形および未来時制・未来完了形では、時制の一致は起きない。
なお、過去から見た過去を言い表す場合は、従属節は過去形のままかあるいは過去完了(大過去)になる。参考書ではいちいち分析しないが、「時制の一致」の観点からも、「大過去」を考えることができる。
従属節が未来系であっても、主節が過去形でありさえすれば、時制の一致は起きる。たとえば例文、
「彼が~するだろうと思う」 I think he will ~.
「彼が遅れるだろうと思った。」 I thought he would ~.
である。
===== 時制の一致の例外 =====
従属節で「水は100度で沸騰する」とか「光は音よりも速く伝わる」などの物理法則を習ったとか教わった、とかなどと場合は、習った時点が過去であっても、従属節の時制は現在形である。
これに準じてか、歴史的事実を習ったり知ったりした場合などは、その事実を習ったりした時点が過去であっても、従属節をけっして過去完了形にせず(大過去にせず)、従属節は単なる過去形にする。
また、「彼は毎日散歩をする」とか「彼は毎日ジョギングをする」など、現在も通用している習慣を表す場合、従属節を過去にせず現在形にするのが普通。
ただし、習慣については、必ずしも従属節を必ず現在形にしないといけないわけではなく、惰性的に主節が過去形なら従属節もひきづられて過去形にすることも実際にはよくあるのが現実である(ロイヤル英文法)
ただし、習慣の内容の従属節を過去形にした場合、果たして現在もその習慣が続いているか分からない、という解釈をされるおそれがある。なので高校生向けの英文法参考書などでは、習慣については時制の一致の例外として現在形にするという教育が好まれている。
仮定法の場合も、時制の一致の例外である。
なお、実現しなかった願望を表す意味での仮定法は基本、仮定法過去または仮定法過去完了のどちらか片方である。
これとは別に「仮定法現在」というのがあるが、願望の表現ではなく、かつては条件文などで仮定法現在が使われていた歴史もあったが、しかし古風な表現方法であり、なので21世紀ではあまり使われない。古風な文体を意図的に書く場合などで、仮定法現在を用いる場合もある。
==== 未来 ====
未来の出来事であっても、交通機関の時刻表にもとづく出来事や、カレンダーにもとづく行事などは、確定的な未来であるとして、動詞は現在形で表す。
The flight leaves at 10:30. 「その飛行機は10時30分に出発する。」
なお、「飛行機」はであってもいい(青チャート)。
The plane leaves at 10:30. 「その飛行機は10時30分に出発する。」
ほか、現在進行形で、比較的近い、自身などの予定を表せる。
I'm leaving for Sapporo tomorrow. 「私は明日、札幌に行く予定です。」
I'm visiting Sapporo tomorrow. 「私は明日、札幌に行く予定です。」
上述の現在進行形による予定の表現には、現在その準備や手配を具体的に整えているという含みもある。
be about to ~ 「まさに~が始まろうとしている」
これとほとんど同じ意味で、
be on the point of ~ing
== 現在 ==
=== 一般的事実 ===
The earth goes around the sun. 「地球は太陽のまわりを回っている。」
のように、時間の経過により変化しない真理・一般的事実は、現在形であらわす(ジーニアス、エバーグリーン)。
なお、インスパイアでは、
The moon goes around the earth. 「月は地球のまわりを回っている。」
である。
=== ことわざ ===
ほか、ことわざも現在形が普通。
All roads lead to Rome. 「すべての道はローマに通ず」※ ジーニアス
Practice makes perfect. 「習うより慣れろ」 ※インスパイア
The earky bird catches the worm. 「早起きの鳥は虫を捕らえる。」(「早起きは三文の得」に相当)※青チャート
=== スポーツ実況など ===
John pass the ball to Mike. He kicks to the goal. 「ジョンがボールをマイクにパス。マイク、ゴールへシュート。」
※ 青チャート、インスパイア。
なお、実況放送では、進行の順番どおりに説明していくのが普通(インスパイア)。
その他、「歴史的現在」と言い、小説などで、過去の出来事でも、まるで目の前で起きているかのように、現在形で表す表現技法がある。(※ 青チャート、インスパイア。)
r1t1pqusl7olwwlqmy2bvlf6izehr7l
205695
205694
2022-07-22T21:03:42Z
すじにくシチュー
12058
wikitext
text/x-wiki
=== 時制の一致と話法 ===
==== 時制の一致 ====
===== 時制の一致の原則 =====
ジーニアス、ロイヤル英文法にある典型的な例文だが、
「私は、彼が忙しいと思う」 I think that he is busy.
「私は、彼が忙しいと思った」 I thought that he was busy.
これを分析しよう。主節が「思った」と過去形になると、英語では、従属節の意味が「忙しい」と現在形であっても、主節にあわせて he was busy のように動詞が過去形になります。このような現象を「時制の一致」(じせいのいっち)と言います。
時制の一致が起きるのは、主節が過去形または過去完了形の場合だけである。なお、過去完了形については高校で習う。
つまり、現在形・現在進行形および未来時制・未来完了形では、時制の一致は起きない。
なお、過去から見た過去を言い表す場合は、従属節は過去形のままかあるいは過去完了(大過去)になる。参考書ではいちいち分析しないが、「時制の一致」の観点からも、「大過去」を考えることができる。
従属節が未来系であっても、主節が過去形でありさえすれば、時制の一致は起きる。たとえば例文、
「彼が~するだろうと思う」 I think he will ~.
「彼が遅れるだろうと思った。」 I thought he would ~.
である。
===== 時制の一致の例外 =====
従属節で「水は100度で沸騰する」とか「光は音よりも速く伝わる」などの物理法則を習ったとか教わった、とかなどと場合は、習った時点が過去であっても、従属節の時制は現在形である。
これに準じてか、歴史的事実を習ったり知ったりした場合などは、その事実を習ったりした時点が過去であっても、従属節をけっして過去完了形にせず(大過去にせず)、従属節は単なる過去形にする。
また、「彼は毎日散歩をする」とか「彼は毎日ジョギングをする」など、現在も通用している習慣を表す場合、従属節を過去にせず現在形にするのが普通。
ただし、習慣については、必ずしも従属節を必ず現在形にしないといけないわけではなく、惰性的に主節が過去形なら従属節もひきづられて過去形にすることも実際にはよくあるのが現実である(ロイヤル英文法)
ただし、習慣の内容の従属節を過去形にした場合、果たして現在もその習慣が続いているか分からない、という解釈をされるおそれがある。なので高校生向けの英文法参考書などでは、習慣については時制の一致の例外として現在形にするという教育が好まれている。
仮定法の場合も、時制の一致の例外である。
なお、実現しなかった願望を表す意味での仮定法は基本、仮定法過去または仮定法過去完了のどちらか片方である。
これとは別に「仮定法現在」というのがあるが、願望の表現ではなく、かつては条件文などで仮定法現在が使われていた歴史もあったが、しかし古風な表現方法であり、なので21世紀ではあまり使われない。古風な文体を意図的に書く場合などで、仮定法現在を用いる場合もある。
==== 未来 ====
未来の出来事であっても、交通機関の時刻表にもとづく出来事や、カレンダーにもとづく行事などは、確定的な未来であるとして、動詞は現在形で表す。
The flight leaves at 10:30. 「その飛行機は10時30分に出発する。」
なお、「飛行機」はであってもいい(青チャート)。
The plane leaves at 10:30. 「その飛行機は10時30分に出発する。」
ほか、現在進行形で、比較的近い、自身などの予定を表せる。
I'm leaving for Sapporo tomorrow. 「私は明日、札幌に行く予定です。」
I'm visiting Sapporo tomorrow. 「私は明日、札幌に行く予定です。」
上述の現在進行形による予定の表現には、現在その準備や手配を具体的に整えているという含みもある。
be about to ~ 「まさに~が始まろうとしている」
これとほとんど同じ意味で、
be on the point of ~ing
== 現在 ==
=== 一般的事実 ===
The earth goes around the sun. 「地球は太陽のまわりを回っている。」
のように、時間の経過により変化しない真理・一般的事実は、現在形であらわす(ジーニアス、エバーグリーン)。
なお、インスパイアでは、
The moon goes around the earth. 「月は地球のまわりを回っている。」
である。
ほか、
Water consists of hydrogen and oxygen. 「水は水素と酸素から成る。」※エバーグリーン、ロイヤル
=== ことわざ ===
ほか、ことわざも現在形が普通。
All roads lead to Rome. 「すべての道はローマに通ず」※ ジーニアス
Practice makes perfect. 「習うより慣れろ」 ※インスパイア
The earky bird catches the worm. 「早起きの鳥は虫を捕らえる。」(「早起きは三文の得」に相当)※青チャート
=== スポーツ実況など ===
John pass the ball to Mike. He kicks to the goal. 「ジョンがボールをマイクにパス。マイク、ゴールへシュート。」
※ 青チャート、インスパイア。
なお、実況放送では、進行の順番どおりに説明していくのが普通(インスパイア)。
その他、「歴史的現在」と言い、小説などで、過去の出来事でも、まるで目の前で起きているかのように、現在形で表す表現技法がある。(※ 青チャート、インスパイア。)
nx5kmaxr77fditl5chtzroucizgnrxn
205696
205695
2022-07-22T21:12:40Z
すじにくシチュー
12058
/* 現在 */
wikitext
text/x-wiki
=== 時制の一致と話法 ===
==== 時制の一致 ====
===== 時制の一致の原則 =====
ジーニアス、ロイヤル英文法にある典型的な例文だが、
「私は、彼が忙しいと思う」 I think that he is busy.
「私は、彼が忙しいと思った」 I thought that he was busy.
これを分析しよう。主節が「思った」と過去形になると、英語では、従属節の意味が「忙しい」と現在形であっても、主節にあわせて he was busy のように動詞が過去形になります。このような現象を「時制の一致」(じせいのいっち)と言います。
時制の一致が起きるのは、主節が過去形または過去完了形の場合だけである。なお、過去完了形については高校で習う。
つまり、現在形・現在進行形および未来時制・未来完了形では、時制の一致は起きない。
なお、過去から見た過去を言い表す場合は、従属節は過去形のままかあるいは過去完了(大過去)になる。参考書ではいちいち分析しないが、「時制の一致」の観点からも、「大過去」を考えることができる。
従属節が未来系であっても、主節が過去形でありさえすれば、時制の一致は起きる。たとえば例文、
「彼が~するだろうと思う」 I think he will ~.
「彼が遅れるだろうと思った。」 I thought he would ~.
である。
===== 時制の一致の例外 =====
従属節で「水は100度で沸騰する」とか「光は音よりも速く伝わる」などの物理法則を習ったとか教わった、とかなどと場合は、習った時点が過去であっても、従属節の時制は現在形である。
これに準じてか、歴史的事実を習ったり知ったりした場合などは、その事実を習ったりした時点が過去であっても、従属節をけっして過去完了形にせず(大過去にせず)、従属節は単なる過去形にする。
また、「彼は毎日散歩をする」とか「彼は毎日ジョギングをする」など、現在も通用している習慣を表す場合、従属節を過去にせず現在形にするのが普通。
ただし、習慣については、必ずしも従属節を必ず現在形にしないといけないわけではなく、惰性的に主節が過去形なら従属節もひきづられて過去形にすることも実際にはよくあるのが現実である(ロイヤル英文法)
ただし、習慣の内容の従属節を過去形にした場合、果たして現在もその習慣が続いているか分からない、という解釈をされるおそれがある。なので高校生向けの英文法参考書などでは、習慣については時制の一致の例外として現在形にするという教育が好まれている。
仮定法の場合も、時制の一致の例外である。
なお、実現しなかった願望を表す意味での仮定法は基本、仮定法過去または仮定法過去完了のどちらか片方である。
これとは別に「仮定法現在」というのがあるが、願望の表現ではなく、かつては条件文などで仮定法現在が使われていた歴史もあったが、しかし古風な表現方法であり、なので21世紀ではあまり使われない。古風な文体を意図的に書く場合などで、仮定法現在を用いる場合もある。
==== 未来 ====
未来の出来事であっても、交通機関の時刻表にもとづく出来事や、カレンダーにもとづく行事などは、確定的な未来であるとして、動詞は現在形で表す。
The flight leaves at 10:30. 「その飛行機は10時30分に出発する。」
なお、「飛行機」はであってもいい(青チャート)。
The plane leaves at 10:30. 「その飛行機は10時30分に出発する。」
ほか、現在進行形で、比較的近い、自身などの予定を表せる。
I'm leaving for Sapporo tomorrow. 「私は明日、札幌に行く予定です。」
I'm visiting Sapporo tomorrow. 「私は明日、札幌に行く予定です。」
上述の現在進行形による予定の表現には、現在その準備や手配を具体的に整えているという含みもある。
be about to ~ 「まさに~が始まろうとしている」
これとほとんど同じ意味で、
be on the point of ~ing
== 現在 ==
=== 一般的事実 ===
The earth goes around the sun. 「地球は太陽のまわりを回っている。」
のように、時間の経過により変化しない真理・一般的事実は、現在形であらわす(ジーニアス、エバーグリーン)。
なお、インスパイアでは、
The moon goes around the earth. 「月は地球のまわりを回っている。」
である。
ほか、
Water consists of hydrogen and oxygen. 「水は水素と酸素から成る。」※エバーグリーン、ロイヤル
=== ことわざ ===
ほか、ことわざも現在形が普通。
All roads lead to Rome. 「すべての道はローマに通ず」※ ジーニアス
Practice makes perfect. 「習うより慣れろ」 ※インスパイア
The earky bird catches the worm. 「早起きの鳥は虫を捕らえる。」(「早起きは三文の得」に相当)※青チャート
=== スポーツ実況など ===
John pass the ball to Mike. He kicks to the goal. 「ジョンがボールをマイクにパス。マイク、ゴールへシュート。」
※ 青チャート、インスパイア。
なお、実況放送では、進行の順番どおりに説明していくのが普通(インスパイア)。
=== 歴史的現在 ===
「歴史的現在」と言い、小説などで、過去の出来事でも、まるで目の前で起きているかのように、現在形で表す表現技法がある。(※ 青チャート、インスパイア。)
そのほか、古人の言葉を引用するとき、「~は・・・と言っている」と現在時制 says を用いることがある。過去時制でも良い(インスパイア)。
bmbt25hb351ieh1jiokauudsnustfgc
205698
205696
2022-07-22T21:27:29Z
すじにくシチュー
12058
/* ことわざ */ なお、「ローマは一日にしてならず」は過去形。
wikitext
text/x-wiki
=== 時制の一致と話法 ===
==== 時制の一致 ====
===== 時制の一致の原則 =====
ジーニアス、ロイヤル英文法にある典型的な例文だが、
「私は、彼が忙しいと思う」 I think that he is busy.
「私は、彼が忙しいと思った」 I thought that he was busy.
これを分析しよう。主節が「思った」と過去形になると、英語では、従属節の意味が「忙しい」と現在形であっても、主節にあわせて he was busy のように動詞が過去形になります。このような現象を「時制の一致」(じせいのいっち)と言います。
時制の一致が起きるのは、主節が過去形または過去完了形の場合だけである。なお、過去完了形については高校で習う。
つまり、現在形・現在進行形および未来時制・未来完了形では、時制の一致は起きない。
なお、過去から見た過去を言い表す場合は、従属節は過去形のままかあるいは過去完了(大過去)になる。参考書ではいちいち分析しないが、「時制の一致」の観点からも、「大過去」を考えることができる。
従属節が未来系であっても、主節が過去形でありさえすれば、時制の一致は起きる。たとえば例文、
「彼が~するだろうと思う」 I think he will ~.
「彼が遅れるだろうと思った。」 I thought he would ~.
である。
===== 時制の一致の例外 =====
従属節で「水は100度で沸騰する」とか「光は音よりも速く伝わる」などの物理法則を習ったとか教わった、とかなどと場合は、習った時点が過去であっても、従属節の時制は現在形である。
これに準じてか、歴史的事実を習ったり知ったりした場合などは、その事実を習ったりした時点が過去であっても、従属節をけっして過去完了形にせず(大過去にせず)、従属節は単なる過去形にする。
また、「彼は毎日散歩をする」とか「彼は毎日ジョギングをする」など、現在も通用している習慣を表す場合、従属節を過去にせず現在形にするのが普通。
ただし、習慣については、必ずしも従属節を必ず現在形にしないといけないわけではなく、惰性的に主節が過去形なら従属節もひきづられて過去形にすることも実際にはよくあるのが現実である(ロイヤル英文法)
ただし、習慣の内容の従属節を過去形にした場合、果たして現在もその習慣が続いているか分からない、という解釈をされるおそれがある。なので高校生向けの英文法参考書などでは、習慣については時制の一致の例外として現在形にするという教育が好まれている。
仮定法の場合も、時制の一致の例外である。
なお、実現しなかった願望を表す意味での仮定法は基本、仮定法過去または仮定法過去完了のどちらか片方である。
これとは別に「仮定法現在」というのがあるが、願望の表現ではなく、かつては条件文などで仮定法現在が使われていた歴史もあったが、しかし古風な表現方法であり、なので21世紀ではあまり使われない。古風な文体を意図的に書く場合などで、仮定法現在を用いる場合もある。
==== 未来 ====
未来の出来事であっても、交通機関の時刻表にもとづく出来事や、カレンダーにもとづく行事などは、確定的な未来であるとして、動詞は現在形で表す。
The flight leaves at 10:30. 「その飛行機は10時30分に出発する。」
なお、「飛行機」はであってもいい(青チャート)。
The plane leaves at 10:30. 「その飛行機は10時30分に出発する。」
ほか、現在進行形で、比較的近い、自身などの予定を表せる。
I'm leaving for Sapporo tomorrow. 「私は明日、札幌に行く予定です。」
I'm visiting Sapporo tomorrow. 「私は明日、札幌に行く予定です。」
上述の現在進行形による予定の表現には、現在その準備や手配を具体的に整えているという含みもある。
be about to ~ 「まさに~が始まろうとしている」
これとほとんど同じ意味で、
be on the point of ~ing
== 現在 ==
=== 一般的事実 ===
The earth goes around the sun. 「地球は太陽のまわりを回っている。」
のように、時間の経過により変化しない真理・一般的事実は、現在形であらわす(ジーニアス、エバーグリーン)。
なお、インスパイアでは、
The moon goes around the earth. 「月は地球のまわりを回っている。」
である。
ほか、
Water consists of hydrogen and oxygen. 「水は水素と酸素から成る。」※エバーグリーン、ロイヤル
=== ことわざ ===
ほか、ことわざも現在形が普通。
All roads lead to Rome. 「すべての道はローマに通ず」※ ジーニアス
Practice makes perfect. 「習うより慣れろ」 ※インスパイア
The earky bird catches the worm. 「早起きの鳥は虫を捕らえる。」(「早起きは三文の得」に相当)※青チャート
なお、「ローマは一日にしてならず」は過去形。
Rome was not built in a day. 「ローマは一日にしてならず」※ インスパイア
=== スポーツ実況など ===
John pass the ball to Mike. He kicks to the goal. 「ジョンがボールをマイクにパス。マイク、ゴールへシュート。」
※ 青チャート、インスパイア。
なお、実況放送では、進行の順番どおりに説明していくのが普通(インスパイア)。
=== 歴史的現在 ===
「歴史的現在」と言い、小説などで、過去の出来事でも、まるで目の前で起きているかのように、現在形で表す表現技法がある。(※ 青チャート、インスパイア。)
そのほか、古人の言葉を引用するとき、「~は・・・と言っている」と現在時制 says を用いることがある。過去時制でも良い(インスパイア)。
9ffuoud7qxkgqj9l0p2hxwb4lme6os8
205699
205698
2022-07-22T21:45:10Z
すじにくシチュー
12058
/* 未来 */ going to come
wikitext
text/x-wiki
=== 時制の一致と話法 ===
==== 時制の一致 ====
===== 時制の一致の原則 =====
ジーニアス、ロイヤル英文法にある典型的な例文だが、
「私は、彼が忙しいと思う」 I think that he is busy.
「私は、彼が忙しいと思った」 I thought that he was busy.
これを分析しよう。主節が「思った」と過去形になると、英語では、従属節の意味が「忙しい」と現在形であっても、主節にあわせて he was busy のように動詞が過去形になります。このような現象を「時制の一致」(じせいのいっち)と言います。
時制の一致が起きるのは、主節が過去形または過去完了形の場合だけである。なお、過去完了形については高校で習う。
つまり、現在形・現在進行形および未来時制・未来完了形では、時制の一致は起きない。
なお、過去から見た過去を言い表す場合は、従属節は過去形のままかあるいは過去完了(大過去)になる。参考書ではいちいち分析しないが、「時制の一致」の観点からも、「大過去」を考えることができる。
従属節が未来系であっても、主節が過去形でありさえすれば、時制の一致は起きる。たとえば例文、
「彼が~するだろうと思う」 I think he will ~.
「彼が遅れるだろうと思った。」 I thought he would ~.
である。
===== 時制の一致の例外 =====
従属節で「水は100度で沸騰する」とか「光は音よりも速く伝わる」などの物理法則を習ったとか教わった、とかなどと場合は、習った時点が過去であっても、従属節の時制は現在形である。
これに準じてか、歴史的事実を習ったり知ったりした場合などは、その事実を習ったりした時点が過去であっても、従属節をけっして過去完了形にせず(大過去にせず)、従属節は単なる過去形にする。
また、「彼は毎日散歩をする」とか「彼は毎日ジョギングをする」など、現在も通用している習慣を表す場合、従属節を過去にせず現在形にするのが普通。
ただし、習慣については、必ずしも従属節を必ず現在形にしないといけないわけではなく、惰性的に主節が過去形なら従属節もひきづられて過去形にすることも実際にはよくあるのが現実である(ロイヤル英文法)
ただし、習慣の内容の従属節を過去形にした場合、果たして現在もその習慣が続いているか分からない、という解釈をされるおそれがある。なので高校生向けの英文法参考書などでは、習慣については時制の一致の例外として現在形にするという教育が好まれている。
仮定法の場合も、時制の一致の例外である。
なお、実現しなかった願望を表す意味での仮定法は基本、仮定法過去または仮定法過去完了のどちらか片方である。
これとは別に「仮定法現在」というのがあるが、願望の表現ではなく、かつては条件文などで仮定法現在が使われていた歴史もあったが、しかし古風な表現方法であり、なので21世紀ではあまり使われない。古風な文体を意図的に書く場合などで、仮定法現在を用いる場合もある。
==== 未来 ====
未来の出来事であっても、交通機関の時刻表にもとづく出来事や、カレンダーにもとづく行事などは、確定的な未来であるとして、動詞は現在形で表す。
The flight leaves at 10:30. 「その飛行機は10時30分に出発する。」
なお、「飛行機」はであってもいい(青チャート)。
The plane leaves at 10:30. 「その飛行機は10時30分に出発する。」
ほか、現在進行形で、比較的近い、自身などの予定を表せる。
I'm leaving for Sapporo tomorrow. 「私は明日、札幌に行く予定です。」
I'm visiting Sapporo tomorrow. 「私は明日、札幌に行く予定です。」
上述の現在進行形による予定の表現には、現在その準備や手配を具体的に整えているという含みもある。
be about to ~ 「まさに~が始まろうとしている」
これとほとんど同じ意味で、
be on the point of ~ing
中学でも習ったように、
be going to ~(不定詞)
で、比較的に近い未来を表すのが、通常である。
だが例外的に、「行く予定である」を
be going to go というのも、口調が悪いと考える人もいて、この場合は to go が省略されることもある(ロイヤル、インスパイア)。
be going on a picnic 「ピクニックに行くつもりだ」※ インスパイア
ほか、「来るつもり」 going to come の代わりに「coming」と言う場合もある(※ インスパイア)。
== 現在 ==
=== 一般的事実 ===
The earth goes around the sun. 「地球は太陽のまわりを回っている。」
のように、時間の経過により変化しない真理・一般的事実は、現在形であらわす(ジーニアス、エバーグリーン)。
なお、インスパイアでは、
The moon goes around the earth. 「月は地球のまわりを回っている。」
である。
ほか、
Water consists of hydrogen and oxygen. 「水は水素と酸素から成る。」※エバーグリーン、ロイヤル
=== ことわざ ===
ほか、ことわざも現在形が普通。
All roads lead to Rome. 「すべての道はローマに通ず」※ ジーニアス
Practice makes perfect. 「習うより慣れろ」 ※インスパイア
The earky bird catches the worm. 「早起きの鳥は虫を捕らえる。」(「早起きは三文の得」に相当)※青チャート
なお、「ローマは一日にしてならず」は過去形。
Rome was not built in a day. 「ローマは一日にしてならず」※ インスパイア
=== スポーツ実況など ===
John pass the ball to Mike. He kicks to the goal. 「ジョンがボールをマイクにパス。マイク、ゴールへシュート。」
※ 青チャート、インスパイア。
なお、実況放送では、進行の順番どおりに説明していくのが普通(インスパイア)。
=== 歴史的現在 ===
「歴史的現在」と言い、小説などで、過去の出来事でも、まるで目の前で起きているかのように、現在形で表す表現技法がある。(※ 青チャート、インスパイア。)
そのほか、古人の言葉を引用するとき、「~は・・・と言っている」と現在時制 says を用いることがある。過去時制でも良い(インスパイア)。
gg4knisgmk0fza49mp6g433kqzn0lqr
205700
205699
2022-07-22T21:52:46Z
すじにくシチュー
12058
/* 未来 */
wikitext
text/x-wiki
=== 時制の一致と話法 ===
==== 時制の一致 ====
===== 時制の一致の原則 =====
ジーニアス、ロイヤル英文法にある典型的な例文だが、
「私は、彼が忙しいと思う」 I think that he is busy.
「私は、彼が忙しいと思った」 I thought that he was busy.
これを分析しよう。主節が「思った」と過去形になると、英語では、従属節の意味が「忙しい」と現在形であっても、主節にあわせて he was busy のように動詞が過去形になります。このような現象を「時制の一致」(じせいのいっち)と言います。
時制の一致が起きるのは、主節が過去形または過去完了形の場合だけである。なお、過去完了形については高校で習う。
つまり、現在形・現在進行形および未来時制・未来完了形では、時制の一致は起きない。
なお、過去から見た過去を言い表す場合は、従属節は過去形のままかあるいは過去完了(大過去)になる。参考書ではいちいち分析しないが、「時制の一致」の観点からも、「大過去」を考えることができる。
従属節が未来系であっても、主節が過去形でありさえすれば、時制の一致は起きる。たとえば例文、
「彼が~するだろうと思う」 I think he will ~.
「彼が遅れるだろうと思った。」 I thought he would ~.
である。
===== 時制の一致の例外 =====
従属節で「水は100度で沸騰する」とか「光は音よりも速く伝わる」などの物理法則を習ったとか教わった、とかなどと場合は、習った時点が過去であっても、従属節の時制は現在形である。
これに準じてか、歴史的事実を習ったり知ったりした場合などは、その事実を習ったりした時点が過去であっても、従属節をけっして過去完了形にせず(大過去にせず)、従属節は単なる過去形にする。
また、「彼は毎日散歩をする」とか「彼は毎日ジョギングをする」など、現在も通用している習慣を表す場合、従属節を過去にせず現在形にするのが普通。
ただし、習慣については、必ずしも従属節を必ず現在形にしないといけないわけではなく、惰性的に主節が過去形なら従属節もひきづられて過去形にすることも実際にはよくあるのが現実である(ロイヤル英文法)
ただし、習慣の内容の従属節を過去形にした場合、果たして現在もその習慣が続いているか分からない、という解釈をされるおそれがある。なので高校生向けの英文法参考書などでは、習慣については時制の一致の例外として現在形にするという教育が好まれている。
仮定法の場合も、時制の一致の例外である。
なお、実現しなかった願望を表す意味での仮定法は基本、仮定法過去または仮定法過去完了のどちらか片方である。
これとは別に「仮定法現在」というのがあるが、願望の表現ではなく、かつては条件文などで仮定法現在が使われていた歴史もあったが、しかし古風な表現方法であり、なので21世紀ではあまり使われない。古風な文体を意図的に書く場合などで、仮定法現在を用いる場合もある。
==== 未来 ====
未来の出来事であっても、交通機関の時刻表にもとづく出来事や、カレンダーにもとづく行事などは、確定的な未来であるとして、動詞は現在形で表す。
The flight leaves at 10:30. 「その飛行機は10時30分に出発する。」
なお、「飛行機」はであってもいい(青チャート)。
The plane leaves at 10:30. 「その飛行機は10時30分に出発する。」
ほか、現在進行形で、比較的近い、自身などの予定を表せる。
I'm leaving for Sapporo tomorrow. 「私は明日、札幌に行く予定です。」
I'm visiting Sapporo tomorrow. 「私は明日、札幌に行く予定です。」
上述の現在進行形による予定の表現には、現在その準備や手配を具体的に整えているという含みもある。
be about to ~ 「まさに~が始まろうとしている」
これとほとんど同じ意味で、
be on the point of ~ing
中学でも習ったように、
be going to ~(不定詞)
「~するつもりだ」で、あらかじめ考えていた未来の予定・景気悪を表すのが(インスパイア、青チャート)、通常である。
だが例外的に、「行く予定である」を
be going to go というのも、口調が悪いと考える人もいて、この場合は to go が省略されることもある(ロイヤル、インスパイア)。
be going on a picnic 「ピクニックに行くつもりだ」※ インスパイア
ほか、「来るつもり」 going to come の代わりに「coming」と言う場合もある(※ インスパイア)。
なお、will は、その場で考えた意志にもとづく未来の予想に使う。
I'll get a new one today. 「それ今日、買ってくるわ。」
I'm going to get a new one. 「それなら、今日買うつもりだよ。」
というニュアンスの違いがある(青チャート、インスパイア)。
== 現在 ==
=== 一般的事実 ===
The earth goes around the sun. 「地球は太陽のまわりを回っている。」
のように、時間の経過により変化しない真理・一般的事実は、現在形であらわす(ジーニアス、エバーグリーン)。
なお、インスパイアでは、
The moon goes around the earth. 「月は地球のまわりを回っている。」
である。
ほか、
Water consists of hydrogen and oxygen. 「水は水素と酸素から成る。」※エバーグリーン、ロイヤル
=== ことわざ ===
ほか、ことわざも現在形が普通。
All roads lead to Rome. 「すべての道はローマに通ず」※ ジーニアス
Practice makes perfect. 「習うより慣れろ」 ※インスパイア
The earky bird catches the worm. 「早起きの鳥は虫を捕らえる。」(「早起きは三文の得」に相当)※青チャート
なお、「ローマは一日にしてならず」は過去形。
Rome was not built in a day. 「ローマは一日にしてならず」※ インスパイア
=== スポーツ実況など ===
John pass the ball to Mike. He kicks to the goal. 「ジョンがボールをマイクにパス。マイク、ゴールへシュート。」
※ 青チャート、インスパイア。
なお、実況放送では、進行の順番どおりに説明していくのが普通(インスパイア)。
=== 歴史的現在 ===
「歴史的現在」と言い、小説などで、過去の出来事でも、まるで目の前で起きているかのように、現在形で表す表現技法がある。(※ 青チャート、インスパイア。)
そのほか、古人の言葉を引用するとき、「~は・・・と言っている」と現在時制 says を用いることがある。過去時制でも良い(インスパイア)。
qakn33avow9ysmbujsb36lpf1frmpnf
205701
205700
2022-07-22T21:56:03Z
すじにくシチュー
12058
/* 未来 */
wikitext
text/x-wiki
=== 時制の一致と話法 ===
==== 時制の一致 ====
===== 時制の一致の原則 =====
ジーニアス、ロイヤル英文法にある典型的な例文だが、
「私は、彼が忙しいと思う」 I think that he is busy.
「私は、彼が忙しいと思った」 I thought that he was busy.
これを分析しよう。主節が「思った」と過去形になると、英語では、従属節の意味が「忙しい」と現在形であっても、主節にあわせて he was busy のように動詞が過去形になります。このような現象を「時制の一致」(じせいのいっち)と言います。
時制の一致が起きるのは、主節が過去形または過去完了形の場合だけである。なお、過去完了形については高校で習う。
つまり、現在形・現在進行形および未来時制・未来完了形では、時制の一致は起きない。
なお、過去から見た過去を言い表す場合は、従属節は過去形のままかあるいは過去完了(大過去)になる。参考書ではいちいち分析しないが、「時制の一致」の観点からも、「大過去」を考えることができる。
従属節が未来系であっても、主節が過去形でありさえすれば、時制の一致は起きる。たとえば例文、
「彼が~するだろうと思う」 I think he will ~.
「彼が遅れるだろうと思った。」 I thought he would ~.
である。
===== 時制の一致の例外 =====
従属節で「水は100度で沸騰する」とか「光は音よりも速く伝わる」などの物理法則を習ったとか教わった、とかなどと場合は、習った時点が過去であっても、従属節の時制は現在形である。
これに準じてか、歴史的事実を習ったり知ったりした場合などは、その事実を習ったりした時点が過去であっても、従属節をけっして過去完了形にせず(大過去にせず)、従属節は単なる過去形にする。
また、「彼は毎日散歩をする」とか「彼は毎日ジョギングをする」など、現在も通用している習慣を表す場合、従属節を過去にせず現在形にするのが普通。
ただし、習慣については、必ずしも従属節を必ず現在形にしないといけないわけではなく、惰性的に主節が過去形なら従属節もひきづられて過去形にすることも実際にはよくあるのが現実である(ロイヤル英文法)
ただし、習慣の内容の従属節を過去形にした場合、果たして現在もその習慣が続いているか分からない、という解釈をされるおそれがある。なので高校生向けの英文法参考書などでは、習慣については時制の一致の例外として現在形にするという教育が好まれている。
仮定法の場合も、時制の一致の例外である。
なお、実現しなかった願望を表す意味での仮定法は基本、仮定法過去または仮定法過去完了のどちらか片方である。
これとは別に「仮定法現在」というのがあるが、願望の表現ではなく、かつては条件文などで仮定法現在が使われていた歴史もあったが、しかし古風な表現方法であり、なので21世紀ではあまり使われない。古風な文体を意図的に書く場合などで、仮定法現在を用いる場合もある。
==== 未来 ====
未来の出来事であっても、交通機関の時刻表にもとづく出来事や、カレンダーにもとづく行事などは、確定的な未来であるとして、動詞は現在形で表す。
The flight leaves at 10:30. 「その飛行機は10時30分に出発する。」
なお、「飛行機」はであってもいい(青チャート)。
The plane leaves at 10:30. 「その飛行機は10時30分に出発する。」
ほか、現在進行形で、比較的近い、自身などの予定を表せる。
I'm leaving for Sapporo tomorrow. 「私は明日、札幌に行く予定です。」
I'm visiting Sapporo tomorrow. 「私は明日、札幌に行く予定です。」
上述の現在進行形による予定の表現には、現在その準備や手配を具体的に整えているという含みもある。
be about to ~ 「まさに~が始まろうとしている」
これとほとんど同じ意味で、
be on the point of ~ing
中学でも習ったように、
be going to ~(不定詞)
「~するつもりだ」で、あらかじめ考えていた未来の予定・景気悪を表すのが(インスパイア、青チャート)、通常である。
だが例外的に、「行く予定である」を
be going to go というのも、口調が悪いと考える人もいて、この場合は to go が省略されることもある(ロイヤル、インスパイア)。
be going on a picnic 「ピクニックに行くつもりだ」※ インスパイア
ほか、「来るつもり」 going to come の代わりに「coming」と言う場合もある(※ インスパイア)。
なお、will は、その場で考えた意志にもとづく未来の予想に使う。
たとえば、家族に「冷蔵庫に牛乳がないよ」とか「時計が壊れた」とか言われて、その返事として下記、
I'll get a new one today. 「それ今日、買ってくるわ。」 ※ 牛乳がないことに、家族に言われて初めて気づいた
I'm going to get a new one. 「それなら、今日買うつもりだよ。」 ※ 牛乳がなくなることを事前に予想していたり既に知っていたりして、購入計画をすでに立ててあった
というニュアンスの違いがある(青チャート、インスパイア)。
== 現在 ==
=== 一般的事実 ===
The earth goes around the sun. 「地球は太陽のまわりを回っている。」
のように、時間の経過により変化しない真理・一般的事実は、現在形であらわす(ジーニアス、エバーグリーン)。
なお、インスパイアでは、
The moon goes around the earth. 「月は地球のまわりを回っている。」
である。
ほか、
Water consists of hydrogen and oxygen. 「水は水素と酸素から成る。」※エバーグリーン、ロイヤル
=== ことわざ ===
ほか、ことわざも現在形が普通。
All roads lead to Rome. 「すべての道はローマに通ず」※ ジーニアス
Practice makes perfect. 「習うより慣れろ」 ※インスパイア
The earky bird catches the worm. 「早起きの鳥は虫を捕らえる。」(「早起きは三文の得」に相当)※青チャート
なお、「ローマは一日にしてならず」は過去形。
Rome was not built in a day. 「ローマは一日にしてならず」※ インスパイア
=== スポーツ実況など ===
John pass the ball to Mike. He kicks to the goal. 「ジョンがボールをマイクにパス。マイク、ゴールへシュート。」
※ 青チャート、インスパイア。
なお、実況放送では、進行の順番どおりに説明していくのが普通(インスパイア)。
=== 歴史的現在 ===
「歴史的現在」と言い、小説などで、過去の出来事でも、まるで目の前で起きているかのように、現在形で表す表現技法がある。(※ 青チャート、インスパイア。)
そのほか、古人の言葉を引用するとき、「~は・・・と言っている」と現在時制 says を用いることがある。過去時制でも良い(インスパイア)。
hj5ibd1l2wlyscxapnlwrmx1feuxr1z
205702
205701
2022-07-22T22:17:40Z
すじにくシチュー
12058
/* 未来 */
wikitext
text/x-wiki
=== 時制の一致と話法 ===
==== 時制の一致 ====
===== 時制の一致の原則 =====
ジーニアス、ロイヤル英文法にある典型的な例文だが、
「私は、彼が忙しいと思う」 I think that he is busy.
「私は、彼が忙しいと思った」 I thought that he was busy.
これを分析しよう。主節が「思った」と過去形になると、英語では、従属節の意味が「忙しい」と現在形であっても、主節にあわせて he was busy のように動詞が過去形になります。このような現象を「時制の一致」(じせいのいっち)と言います。
時制の一致が起きるのは、主節が過去形または過去完了形の場合だけである。なお、過去完了形については高校で習う。
つまり、現在形・現在進行形および未来時制・未来完了形では、時制の一致は起きない。
なお、過去から見た過去を言い表す場合は、従属節は過去形のままかあるいは過去完了(大過去)になる。参考書ではいちいち分析しないが、「時制の一致」の観点からも、「大過去」を考えることができる。
従属節が未来系であっても、主節が過去形でありさえすれば、時制の一致は起きる。たとえば例文、
「彼が~するだろうと思う」 I think he will ~.
「彼が遅れるだろうと思った。」 I thought he would ~.
である。
===== 時制の一致の例外 =====
従属節で「水は100度で沸騰する」とか「光は音よりも速く伝わる」などの物理法則を習ったとか教わった、とかなどと場合は、習った時点が過去であっても、従属節の時制は現在形である。
これに準じてか、歴史的事実を習ったり知ったりした場合などは、その事実を習ったりした時点が過去であっても、従属節をけっして過去完了形にせず(大過去にせず)、従属節は単なる過去形にする。
また、「彼は毎日散歩をする」とか「彼は毎日ジョギングをする」など、現在も通用している習慣を表す場合、従属節を過去にせず現在形にするのが普通。
ただし、習慣については、必ずしも従属節を必ず現在形にしないといけないわけではなく、惰性的に主節が過去形なら従属節もひきづられて過去形にすることも実際にはよくあるのが現実である(ロイヤル英文法)
ただし、習慣の内容の従属節を過去形にした場合、果たして現在もその習慣が続いているか分からない、という解釈をされるおそれがある。なので高校生向けの英文法参考書などでは、習慣については時制の一致の例外として現在形にするという教育が好まれている。
仮定法の場合も、時制の一致の例外である。
なお、実現しなかった願望を表す意味での仮定法は基本、仮定法過去または仮定法過去完了のどちらか片方である。
これとは別に「仮定法現在」というのがあるが、願望の表現ではなく、かつては条件文などで仮定法現在が使われていた歴史もあったが、しかし古風な表現方法であり、なので21世紀ではあまり使われない。古風な文体を意図的に書く場合などで、仮定法現在を用いる場合もある。
==== 未来 ====
未来の出来事であっても、交通機関の時刻表にもとづく出来事や、カレンダーにもとづく行事などは、確定的な未来であるとして、動詞は現在形で表す。
The flight leaves at 10:30. 「その飛行機は10時30分に出発する。」
なお、「飛行機」はであってもいい(青チャート)。
The plane leaves at 10:30. 「その飛行機は10時30分に出発する。」
ほか、現在進行形で、比較的近い、自身などの予定を表せる。
I'm leaving for Sapporo tomorrow. 「私は明日、札幌に行く予定です。」
I'm visiting Sapporo tomorrow. 「私は明日、札幌に行く予定です。」
上述の現在進行形による予定の表現には、現在その準備や手配を具体的に整えているという含みもある。
be about to ~ 「まさに~が始まろうとしている」
これとほとんど同じ意味で、
be on the point of ~ing
中学でも習ったように、
be going to ~(不定詞)
「~するつもりだ」で、あらかじめ考えていた未来の予定・景気悪を表すのが(インスパイア、青チャート)、通常である。
だが例外的に、「行く予定である」を
be going to go というのも、口調が悪いと考える人もいて、この場合は to go が省略されることもある(ロイヤル、インスパイア)。
be going on a picnic 「ピクニックに行くつもりだ」※ インスパイア
ほか、「来るつもり」 going to come の代わりに「coming」と言う場合もある(※ インスパイア)。
なお、will は、その場で考えた意志にもとづく未来の予想に使う。
たとえば、家族に「冷蔵庫に牛乳がないよ」とか「時計が壊れた」とか言われて、その返事として下記、
I'll get a new one today. 「それ今日、買ってくるわ。」 ※ 牛乳がないことに、家族に言われて初めて気づいた
I'm going to get a new one. 「それなら、今日買うつもりだよ。」 ※ 牛乳がなくなることを事前に予想していたり既に知っていたりして、購入計画をすでに立ててあった
というニュアンスの違いがある(青チャート、インスパイア)。
そのほか、「be to 動詞の原形」つまり 「be to不定詞」で、公的な予定を表す。
== 現在 ==
=== 一般的事実 ===
The earth goes around the sun. 「地球は太陽のまわりを回っている。」
のように、時間の経過により変化しない真理・一般的事実は、現在形であらわす(ジーニアス、エバーグリーン)。
なお、インスパイアでは、
The moon goes around the earth. 「月は地球のまわりを回っている。」
である。
ほか、
Water consists of hydrogen and oxygen. 「水は水素と酸素から成る。」※エバーグリーン、ロイヤル
=== ことわざ ===
ほか、ことわざも現在形が普通。
All roads lead to Rome. 「すべての道はローマに通ず」※ ジーニアス
Practice makes perfect. 「習うより慣れろ」 ※インスパイア
The earky bird catches the worm. 「早起きの鳥は虫を捕らえる。」(「早起きは三文の得」に相当)※青チャート
なお、「ローマは一日にしてならず」は過去形。
Rome was not built in a day. 「ローマは一日にしてならず」※ インスパイア
=== スポーツ実況など ===
John pass the ball to Mike. He kicks to the goal. 「ジョンがボールをマイクにパス。マイク、ゴールへシュート。」
※ 青チャート、インスパイア。
なお、実況放送では、進行の順番どおりに説明していくのが普通(インスパイア)。
=== 歴史的現在 ===
「歴史的現在」と言い、小説などで、過去の出来事でも、まるで目の前で起きているかのように、現在形で表す表現技法がある。(※ 青チャート、インスパイア。)
そのほか、古人の言葉を引用するとき、「~は・・・と言っている」と現在時制 says を用いることがある。過去時制でも良い(インスパイア)。
28ct8rb4s1cyc3vljwa555zer7kbrqr
Crystal
0
35227
205680
205671
2022-07-22T15:32:27Z
Ef3
694
/* Integer#times */ Use p!
wikitext
text/x-wiki
{{Pathnav|メインページ|工学|情報技術|プログラミング|frame=1}}
{{Wikipedia|Crystal (プログラミング言語)}}
本書は、[[w:Crystal (プログラミング言語)|Crystal]]のチュートリアルです。
'''Crystal'''は、Ary Borenszweig、Juan Wajnerman、Brian Cardiffと300人以上の貢献者によって設計・開発された[汎用オブジェクト指向プログラミング言語です<ref>{{Cite web
|url=https://github.com/crystal-lang/crystal/graphs/contributors
|title=Contributors
|accessdate=2022-07-18
|website=github.com
}}</ref>。[[Crystal]] にヒントを得た構文を持ち、静的型チェックを備えた [[コンパイル型言語]]ですが、変数やメソッドの引数の型は一般には不要です。型は高度なグローバル[[型推論]]アルゴリズムによって解決される。<ref>{{Cite web
|url=http://crystal-lang.org/2013/09/23/type-inference-part-1.html
|title=Type inference part 1
|last=Brian J.
|first=Cardiff
|date=2013-09-09
|accessdate=2022-07-18
|website=crystal-lang.org
}}</ref>Crystalは[[Apache License]]バージョン2.0のもと、FOSSとしてリリースされています。
__TOC__
== Hello, World! ==
他の多くのチュートリアルがそうであるように、
私たちもまずはCrystalの世界にあいさつすることから始めましょう。
''hello.cr''というファイルを作り(Crystalのソースファイルの拡張子は''.cr'' です)、次のように書いて保存して下さい。
;hello.cr:<syntaxhighlight lang=Crystal>
puts 'Hello, World!'
</syntaxhighlight>
;コマンドラインでの操作:<syntaxhighlight lang="console">
% cat hello.cr
puts 'Hello, World!'
% crystal hello.cr
In hello.cr:1:6
1 | puts 'Hello, World!'
^
Error: unterminated char literal, use double quotes for strings
% sed -i -e "s@'@Q@g" -e 's@Q@"@g' hello.cr
% cat hello.cr
puts "Hello, World!"
% crystal hello.cr
Hello, World!
</syntaxhighlight>
この1行のスクリプトは、メソッド<code>puts</code> に文字リテラル<code>"Hello, World!"</code>を渡し呼出しています。
このプログラムは、[[Ruby#Hello, World!]]と同じですが、Crystalでは文字列リテラルは <code>"…"</code> で囲うのでそれだけ変更しました。
[TODO: コマンドラインツール crystal の解説。 crystal ファイル名 は crystal run ファイル名 の短縮形で、インタープリタ的な実行…ではなく、内部ビルドツールでコンパイル・実行を行う]
== Ruby との違い ==
Crystalは、Rubyに触発された構文を持つものの、Rubyとの互換性をゴールに定めては'''いません'''。
このため、細部を見ると仕様に差異があり、Rubyのソースコードをcrystalに掛けるても前節の 'Hello World' の様にコンパイルに失敗することがあります。
また、コンパイルできても実行結果に違いが出ることがあります。
ここでは、Ruby との違いについて実際のコードと双方の結果を比較することで、差異についての理解を深めていきます。
=== 整数型の特性 ===
;大きな整数:<syntaxhighlight lang=Crystal>
p 2 ** 999
p (2 ** 999).class
</syntaxhighlight>
;rubyの実行結果:<syntaxhighlight lang="console">
5357543035931336604742125245300009052807024058527668037218751941851755255624680612465991894078479290637973364587765734125935726428461570217992288787349287401967283887412115492710537302531185570938977091076523237491790970633699383779582771973038531457285598238843271083830214915826312193418602834034688
Integer
</syntaxhighlight>
;crystalの実行結果:<syntaxhighlight lang="console">
Unhandled exception: Arithmetic overflow (OverflowError)
from /usr/local/share/crystal/share/crystal/src/int.cr:295:9 in '**'
from pow.cr:1:1 in '__crystal_main'
from /usr/local/share/crystal/share/crystal/src/crystal/main.cr:115:5 in 'main_user_code'
from /usr/local/share/crystal/share/crystal/src/crystal/main.cr:101:7 in 'main'
from /usr/local/share/crystal/share/crystal/src/crystal/main.cr:127:3 in 'main'
from /usr/local/lib64/libc.so.6 in '__libc_start_main'
from /usr/local/.cache/crystal/crystal-run-pow.tmp in '_start'
from ???
</syntaxhighlight>
: Ruby の整数は、桁あふれが起こると自動的に多倍長整数に型変換されるので、継ぎ目なしに大きな数を扱うアルゴルズムが使えます。
: Crystal の整数は、固定長です(大きさについては[[#リテラルと型|後述]])。なので大きな答えになる式を評価すると桁あふれが生じます。桁あふれが生じますが、C言語のように寡黙に処理を続けるのではなく、実行時に例外(OverflowError)が上がるので、例外を捕捉し然るべき処置を施すことが可能です。
==== BigInt ====
<code>big</code> を <code>require</code> すると <code>BigInt</code> が使えるようになります。
;BigInt:<syntaxhighlight lang=Crystal>
require "big"
p BigInt.new(2) ** 999
p (BigInt.new(2) ** 999).class
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="console">
5357543035931336604742125245300009052807024058527668037218751941851755255624680612465991894078479290637973364587765734125935726428461570217992288787349287401967283887412115492710537302531185570938977091076523237491790970633699383779582771973038531457285598238843271083830214915826312193418602834034688
BigInt
</syntaxhighlight>
: BigIntはプリミティブではなので、リテラル表現はありません。また、
::<syntaxhighlight lang=Crystal>
n : BigInt = 2
</syntaxhighlight>
::<syntaxhighlight lang=console>
Error: type must be BigInt, not Int32
</syntaxhighlight>
:: のように型アノテーションすることも出来ません。
=== リテラルと型 ===
;様々なリテラルと型:<syntaxhighlight lang=Crystal>
[nil, false, true, 42, 2.73, 'Q', "string", [1,2,3], {a:1, b:2}].each{|x|
p [x, x.class]
}
</syntaxhighlight>
;rubyの実行結果:<syntaxhighlight lang="console">
[nil, NilClass]
[false, FalseClass]
[true, TrueClass]
[42, Integer]
[2.73, Float]
["Q", String]
["string", String]
[[1, 2, 3], Array]
[{:a=>1, :b=>2}, Hash]
</syntaxhighlight>
;crystalの実行結果:<syntaxhighlight lang="console">
[nil, Nil]
[false, Bool]
[true, Bool]
[42, Int32]
[2.73, Float64]
['Q', Char]
["string", String]
[[1, 2, 3], Array(Int32)]
[{a: 1, b: 2}, NamedTuple(a: Int32, b: Int32)]
</syntaxhighlight>
: Crystal の整数は Int32、浮動小数点数は Float64 です。
;サイズを指定した数リテラル:<syntaxhighlight lang=Crystal>
[1_i64, 2_u32, 3_u64, 4_i32, 5_i16, 6_u8, 7_i128, 8_u128, 3.14_f32, 1.44_f64].each{|x|
p [x, x.class]
}
</syntaxhighlight>
;ruby:Rubyでは、サーフィックスの付いた数値リテラルは無効
;crystalの実行結果:<syntaxhighlight lang="console">
[1, Int64]
[2, UInt32]
[3, UInt64]
[4, Int32]
[5, Int16]
[6, UInt8]
[7, Int128]
[8, UInt128]
[3.14, Float32]
[1.44, Float64]
</syntaxhighlight>
: Crystal では、数値リテラルに _ で始まるサーフィックスを付け { i:符号付き整数, u:符号なし整数, f:浮動小数点数 } と { 8,16,32,64,128 } のビット幅の組合せです<ref>[https://crystal-lang.org/reference/1.5/syntax_and_semantics/literals/ Literals]</ref>。
=== for式がない ===
Crystal には、Ruby にはある for式がありません。
;Rubyのfor式の構文:<syntaxhighlight lang="ruby">
for 変数 in コレクション
文
end
</syntaxhighlight>
:コレクションは Range, Array, Hash など内部構造を持つオブジェクトです。
:for式は、最後に評価した値を返すので、for'''式'''です。
;for式のeachメソッドによる置換え:<syntaxhighlight lang="ruby">
for x in [ 2, 3, 5, 7, 11 ] do
p x
end
# ↓
[ 2, 3, 5, 7, 11 ].each do | x |
p x
end
</syntaxhighlight>
: の様にコレクションの each メソッドで置換え可能なので、Rubyからの移植でも小規模な書換えで済みます<ref>[https://github.com/crystal-lang/crystal/issues/830 "For" Loop support #830]</ref>(後述のマクロで実装できないかと思いましたが、いまのところ無理のようです)。
また loop 式もありませんが while true; … end で間に合います。Ruby では while 式の条件の次に do が置けますが、Crystal では置けません。
=== eval()がない ===
Crystal には eval() はありません。
Crystalはコンパイル型言語ですので、無理もないことです。
もし、Crystal で eval() を実装しようとすると、Common Lisp の様にインタープリターを丸ごとランタイムに含む必要があります。
これはリーズナブルな選択ではありません。
Crystal では、eval() が必要なケースに(限定的ですが)マクロを使うことが出来る可能性があります。
=== マクロ ===
Crystalには、Rubyにはないマクロがあります<ref>[https://crystal-lang.org/reference/1.5/syntax_and_semantics/macros/ Macros - Crystal]</ref>。Rubyは実行時にすべてのオブジェクトにアクセス出来て、メソッド生やし放題なのでマクロは必要ありませんが、Crystalはコンパイル時に型やメソッドを確定する必要があり、特にメソッドジェネレターとしてのマクロにニーズがあります。また、テンプレート言語的なマクロなので、環境変数による条件分岐や、コンテナを渡し繰返し処理する構文もあります(面白いことにマクロには for 文があり、反対にマクロの中では、eachメソッドは使えません)。マクロには <code><nowiki>{{</nowiki>attr.id}}</code> の様にASTへのアクセス手順が用意されており、半ば言語を拡張するようなアプローチを取ることも出来ます。
[TODO:ASTについての解説;コラム向き?]
;マクロを使ったattr_accessorのイミュレーション:<syntaxhighlight lang=crystal>
class Point
def initialize(@x : Int32, @y : Int32)
end
# macro定義
macro attr_accessor(*attrs)
{% for attr in attrs %}
def {{attr.id}}() @{{attr.id}} end
def {{attr.id}}=(var) @{{attr.id}} = var end
{% end %}
end
# macro呼出し
attr_accessor :x, :y
end
pt = Point.new(20, 30)
p [pt.x, pt.y]
t = pt.x
pt.x = pt.y
pt.y = t
p [pt.x, pt.y]
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
[20, 30]
[30, 20]
</syntaxhighlight>
: Ruby には、attr_accessor と言う「クラスのメンバーのアクセサーを自動生成するメソッド」がありますが、Crystalにはないようなので、マクロで実装しました。
:: attr_accessor :name からは
::<syntaxhighlight lang=ruby>
def name() @name end
def name=(val) @name = val end
</syntaxhighlight>相当のコードが生成されます。
[TODO:マクロの機能と構文の説明 *の付いた引数、 <nowiki>{{</nowiki>引数}}、{% … %} 構文]
==== マクロ p! ====
メソッド p は、与えられた「式」の inspaect() の返す値を puts しますが、マクロ p! は、それに先んじて(評価前の)「式」を表示します<ref>[https://crystal-lang.org/api/1.5.0/Crystal/Macros.html#p%21%28%2Aexpressions%29%3ANop-instance-method def p!(*expressions) : Nop]</ref>。
;p!の例:<syntaxhighlight lang=crystal>
x, y = true, false
p! x,y,x && y, x || y, x ^ y, !x, x != y, x == y
ary = [ 1, 2, 3 ]
p! ary
p! ary.map(&. << 1)
p! ary.map(&.to_f)
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
x # => true
y # => false
x && y # => false
x || y # => true
x ^ y # => true
!x # => false
x != y # => true
x == y # => false
ary # => [1, 2, 3]
ary.map(&.<<(1)) # => [2, 4, 6]
ary.map(&.to_f) # => [1.0, 2.0, 3.0]
</syntaxhighlight>
===== 入れ子のp! =====
マクロ p! は入れ子に出来ます。また、一旦ASTに変換してから再度ソースコードに変換するので、等価な別の構文に変換されることがあります。
;入れ子のp!:<syntaxhighlight lang=crystal>
p! (
100.times{|i|
p! i
break i if i > 12
}
)
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
(100.times do |i|
p!(i)
if i > 12
break i
end
end) # => i
# => 0
i # => 1
i # => 2
i # => 3
i # => 4
i # => 5
i # => 6
i # => 7
i # => 8
i # => 9
i # => 10
i # => 11
i # => 12
i # => 13
13
</syntaxhighlight>
=== クラス ===
==== シンプルなクラス ====
;シンプルなクラス:<syntaxhighlight lang=crystal highlight="2" line>
class Hello
def initialize(@name : String = "World")
end
def greeting
puts "Hello #{@name}!"
end
end
hello = Hello.new()
hello.greeting
universe = Hello.new("Universe")
universe.greeting
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
Hello World!
Hello Universe!
</syntaxhighlight>
:;初期化メソッド
:: <syntaxhighlight lang=crystal line start=4>
def initialize(@name : String = "World")
end
</syntaxhighlight>
::Rubyであれば
:: <syntaxhighlight lang=ruby line start=4>
def initialize(name = "World")
@name = name
end
</syntaxhighlight>
::とするところですが、Crystalでは、型アノテーション <code> : String</code> を使い、引数の型を限定しました。
::また、(@ 付きの)アトリビュート名を仮引数にすると、そのままアトリビュート(a.k.a. インスタンス変数)に仮引数が代入されます。
::これは、C++のコンストラクターのメンバー初期化リストと同じアイディアですが、Crystalではインスタンス変数に @ が前置されるので、仮引数に @ が出現すればインスタンス変数の初期値だと自明で、聡明な選択です。
==== 都市間の大圏距離 ====
[[Ruby#ユーザー定義クラス]]の都市間の大圏距離を求めるメソッドを追加した例を、Crystalに移植しました。
;都市間の大圏距離:<syntaxhighlight lang=crystal highlight=”2,7,12” line>
class GeoCoord
getter :longitude, :latitude
def initialize(@longitude : Float64, @latitude : Float64)
end
def to_s(io)
ew, ns = "東経", "北緯"
long, lat = @longitude, @latitude
ew, long = "西経", -long if long < 0.0
ns, lat = "南緯", -lat if lat < 0.0
io << "(#{ew}: #{long}, #{ns}: #{lat})"
end # https://github.com/crystal-lang/crystal/issues/259
def distance(other)
i, r = Math::PI / 180, 6371.008
Math.acos(Math.sin(@latitude*i) * Math.sin(other.latitude * i) +
Math.cos(@latitude*i) * Math.cos(other.latitude * i) * Math.cos(@longitude * i - other.longitude * i)) * r
end
end
# メソッドの先頭を大文字に出来ないのでクラス名のメソッドは作ることが出来ない
# def GeoCoord(lng : Float64, lat : Float64)
# GeoCoord.new(lng, lat)
# end
Sites = {
"東京駅": GeoCoord.new(139.7673068, 35.6809591),
"シドニー・オペラハウス": GeoCoord.new(151.215278, -33.856778),
"グリニッジ天文台": GeoCoord.new(-0.0014, 51.4778),
}
Sites.each { |name, gc|
puts "#{name}: #{gc}"
}
puts ""
keys, len = Sites.keys, Sites.size
keys.each_with_index { |x, i|
y = keys[(i + 1) % len]
puts "#{x} ⇔ #{y}: #{Sites[x].distance(Sites[y])} [km]"
}
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
東京駅: (東経: 139.7673068, 北緯: 35.6809591)
シドニー・オペラハウス: (東経: 151.215278, 南緯: 33.856778)
グリニッジ天文台: (西経: 0.0014, 北緯: 51.4778)
東京駅 ⇔ シドニー・オペラハウス: 7823.269299386704 [km]
シドニー・オペラハウス ⇔ グリニッジ天文台: 16987.2708377249 [km]
グリニッジ天文台 ⇔ 東京駅: 9560.546566490015 [km]
</syntaxhighlight>
:Crystal には、<syntaxhighlight lang=ruby inline> attr_accessor </syntaxhighlight> はありませんが、標準ライブラリーのマクロに <syntaxhighlight lang=crystal inline> getter </syntaxhighlight>があるので
:: <syntaxhighlight lang=crystal line start=2>
getter :longitude, :latitude
</syntaxhighlight>
::としました。
::将来、<syntaxhighlight lang=ruby inline> attr_accessor </syntaxhighlight> が実装される可能性はありますが、姉妹品の<syntaxhighlight lang=crystal inline> setter </syntaxhighlight> との併用が下位互換性を考えると確実です。
: to_s は、Ruby ならば
:: <syntaxhighlight lang=ruby line start=7>
def to_s()
</syntaxhighlight>
:: <syntaxhighlight lang=ruby line start=12>
"(#{ew}: #{long}, #{ns}: #{lat})"
</syntaxhighlight>
:: ですが、Crystalでは追加の引数 <var>io</var> が必要で
:: <syntaxhighlight lang=ruby line start=7>
def to_s(io)
</syntaxhighlight>
:: <syntaxhighlight lang=ruby line start=12>
io << "(#{ew}: #{long}, #{ns}: #{lat})"
</syntaxhighlight>
: Ruby にはクラス名と同じ名前のメソッドで .new を呼出す文化があるのですが、Crystalはメソッドの先頭を大文字に出来ないので、これは見送りました。
==== 包含と継承 ====
[[JavaScript/クラス#包含と継承]]を、Rubyに移植した[[Ruby#包含と継承]]を、Crystalに移植しました。
;包含と継承の例:<syntaxhighlight lang=crystal line>
class Point
def initialize(@x = 0, @y = 0)
end
def inspect(io)
io << "x:#{@x}, y:#{@y}"
end
def move(dx = 0, dy = 0)
@x, @y = @x + dx, @y + dy
self
end
end
class Shape
def initialize(x = 0, y = 0)
@location = Point.new(x, y)
end
def inspect(io)
@location.inspect(io)
end
def move(x, y)
@location.move(x, y)
self
end
end
class Rectangle < Shape
def initialize(x = 0, y = 0, @width = 0, @height = 0)
super(x, y)
end
def inspect(io)
super(io)
io << ", width:#{@width}, height:#{@height}"
end
end
rct = Rectangle.new(12, 32, 100, 50)
p! rct,
rct.is_a?(Rectangle),
rct.is_a?(Shape),
rct.is_a?(Point),
rct.move(11, 21)
(END)</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
rct # => x:12, y:32, width:100, height:50
rct.is_a?(Rectangle) # => true
rct.is_a?(Shape) # => true
rct.is_a?(Point) # => false
rct.move(11, 21) # => x:23, y:53, width:100, height:50
</syntaxhighlight>
;crystal tool hierarchy:<syntaxhighlight lang=console>
% crystal tool hierarchy inclusion-and-inheritance.cr -e Shape
- class Object (4 bytes)
|
+- class Reference (4 bytes)
|
+- class Shape (16 bytes)
. @location : Point (8 bytes)
|
+- class Rectangle (24 bytes)
@width : Int32 (4 bytes)
@height : Int32 (4 bytes)
</syntaxhighlight>
: crystal の tool hierarchy サブコマンドで、クラスの継承関係がわかります。
==== 抽象クラス ====
[[Java/抽象クラス]]を、Crystalに移植しました。
;抽象クラスの宣言:<syntaxhighlight lang=Java>
abstract class クラス名
#
end
</syntaxhighlight>
: このクラス名は、 .new でインスタンス化出来ません。
:: Error: can't instantiate abstract class クラス名
: となります。
:インスタンス化することは出来ませんが、抽象クラスを別のクラスが継承する事は出来ます。
:また、抽象クラスを <code>super()</code> を使うことでメソッドを呼び出せるので、抽象メソッドではないメソッド(具象メソッド)を持つことも、インスタンス変数も持つことも出来ます。
:'''抽象クラスの例'''では、Shapeのinitializeメソッドが抽象クラスの具象メソッドとなっています。
;抽象メソッドの宣言:<syntaxhighlight lang=Java>
abstract def メソッド名
</syntaxhighlight>
: 派生先のクラスで、「メソッド名」を定義(def)し忘れると
:: Error: abstract `def クラス名#メソッド名()` must be implemented by クラス名
: となります
;抽象クラスの例:<syntaxhighlight lang=crystal line>
abstract class Shape
def initialize(@x = 0.0, @y = 0.0)
end
abstract def to_s(io)
abstract def area
end
class Square < Shape
def initialize(x, y, @wh = 0.0)
super(x, y)
end
def to_s(io)
io << "Square(#{@x}, #{@y}, #{@wh})"
end
def area
@wh * @wh
end
end
abstract class Shape
def initialize(@x = 0.0, @y = 0.0)
end
abstract def to_s(io)
abstract def area
end
class Square < Shape
def initialize(x, y, @wh = 0.0)
super(x, y)
end
def to_s(io)
io << "Square(#{@x}, #{@y}, #{@wh})"
end
def area
@wh * @wh
end
end
class Recrangle < Shape
def initialize(x, y, @w = 0.0, @h = 0.0)
super(x, y)
end
def to_s(io)
io << "Rectanle(#{@x}, #{@y}, #{@w}, #{@h})"
end
def area
@w * @h
end
end
class Circle < Shape
def initialize(x, y, @r = 0.0)
super(x, y)
end
def to_s(io)
io << "Circle(#{@x}, #{@y}, #{@r})"
end
def area
3.1425926536 * @r * @r
end
end
shapes = [
Square.new(5.0, 10.0, 15.0),
Recrangle.new(13.0, 23.0, 20.0, 10.0),
Circle.new(3.0, 2.0, 20.0),
] of Shape
shapes.each do |shape|
puts("#{shape}: #{shape.area}")
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
Square(5.0, 10.0, 15.0): 225.0
Rectanle(13.0, 23.0, 20.0, 10.0): 200.0
Circle(3.0, 2.0, 20.0): 1257.03706144
</syntaxhighlight>
;crystal tool hierarchy:<syntaxhighlight lang=console>
% crystal tool hierarchy abstract.cr -e Shape
- class Object (4 bytes)
|
+- class Reference (4 bytes)
|
+- class Shape (24 bytes)
. @x : Float64 (8 bytes)
. @y : Float64 (8 bytes)
|
+- class Circle (32 bytes)
| @r : Float64 (8 bytes)
|
+- class Recrangle (40 bytes)
| @w : Float64 (8 bytes)
| @h : Float64 (8 bytes)
|
+- class Square (32 bytes)
@wh : Float64 (8 bytes)
</syntaxhighlight>
: crystal の tool hierarchy サブコマンドで、クラスの継承関係がわかります。
: 「包含と継承の例」と比べると、ShapeとRectangleが同じ階層にあることがわかると思います。
[TODO:virtual class::いい例がない]
== キーワード ==
Crystalのキーワード( ''keywords'' ) は、以下の通り。
<code>abstract</code> <code>alias</code> <code>as</code> <code>asm</code> <code>begin</code> <code>break</code> <code>case</code> <code>class</code> <code>def</code> <code>do</code> <code>else</code> <code>elsif</code> <code>end</code> <code>ensure</code> <code>enum</code> <code>extend</code> <code>for</code> <code>fun</code> <code>if</code> <code>include</code> <code>instance_sizeof</code> <code>lib</code> <code>macro</code> <code>module</code> <code>next</code> <code>of</code> <code>out</code> <code>pointerof</code> <code>private</code> <code>protected</code> <code>rescue</code> <code>return</code> <code>require</code> <code>select</code> <code>sizeof</code> <code>struct</code> <code>super</code> <code>then</code> <code>type</code> <code>typeof</code> <code>uninitialized</code> <code>union</code> <code>unless</code> <code>until</code> <code>when</code> <code>while</code> <code>with</code> <code>yield</code>
<!--
<code>__DIR__</code> <code>__END_LINE__</code> <code>__FILE__</code> <code>__LINE__</code>
-->
== 演算子 ==
Crystalは、1つ、2つ、または3つのオペランドを持つ数多くの演算子をサポートしています<ref>[https://crystal-lang.org/reference/1.5/syntax_and_semantics/operators.html Operators]access-date:2022-07-22</ref>。
演算子式は、実際にはメソッド呼び出しとしてパースされます。例えば、<code>a + b</code> は <code>a.+(b)</code> と意味的に同じで、引数 b を持つ a のメソッド + を呼び出すことになります。
{| class="wikitable"
|+ 演算子の優先度
!種類
!演算子
|-
|インデックス アクセサー
|<code>[]</code>, <code>[]?</code>
|-
|単項
|<code>+</code>, <code>&+</code>, <code>-</code>, <code>&-</code>, <code>!</code>, <code>~</code>
|-
|指数
|<code>**</code>, <code>&**</code>
|-
|乗除
|<code>*</code>, <code>&*</code>, <code>/</code>, <code>//</code>, <code>%</code>
|-
|加減
|<code>+</code>, <code>&+</code>, <code>-</code>, <code>&-</code>
|-
|シフト
|<code><<</code>, <code>>></code>
|-
|ビット間 AND
|<code>&</code>
|-
|ビット間 OR/XOR
|<code><nowiki>|</nowiki></code>,<code>^</code>
|-
|等値
|<code>==</code>, <code>!=</code>, <code>=~</code>, <code>!~</code>, <code>===</code>
|-
|比較
|<code><</code>, <code><=</code>, <code>></code>, <code>>=</code>, <code><=></code>
|-
|論理 AND
|<code>&&</code>
|-
|論理 OR
|<code><nowiki>||</nowiki></code>
|-
|Range
|<code>..</code>, <code>...</code>
|-
|条件
|<code>?:</code>
|-
|代入
|<code>=</code>, <code>[]=</code>, <code>+=</code>, <code>&+=</code>, <code>-=</code>, <code>&-=</code>, <code>*=</code>, <code>&*=</code>, <code>/=</code>, <code>//=</code>, <code>%=</code>, <code><nowiki>|=</nowiki></code>, <code>&=</code>,<code>^=</code>,<code>**=</code>,<code><<=</code>,<code>>>=</code>, <code><nowiki>||=</nowiki></code>, <code>&&=</code>
|-
|スプラット
|<code>*</code>, <code>**</code>
|}
== 制御構造 ==
'''[[w:制御構造|制御構造]]'''(せいぎょこうぞう、''control flow'')とは、「順次」「分岐」「反復」という基本的な処理のことを言います。
{{コラム|Crystalの真理値|2=
制御構造は「条件式」が真であるか偽であるかによって分岐や反復の振る舞いが変わります。
では「条件式」が真・偽はどの様に決まるのでしょう?
Crystalでは <code>false</code> あるいは <code>nil</code> であると偽、それ以外が真です。
なので <code>0</code> も <code>[]</code>(空のArray) も <code>{}</code>(空のNamedTuple)も真です。
}}
=== 条件分岐 ===
Crystalの条件分岐には、[[#if|if]], [[#until|until]] と [[#case|case]]の3つの構文があります。
==== if ====
'''[[w:if|if]]'''は条件式によって実行・否を切り替える構造構文で、評価した式の値を返すので条件演算子でもあります。
;ifの例:<syntaxhighlight lang=crystal line>
a = 0.0 / 0.0
if a < 0
puts "minus"
elsif a > 0
puts "plus"
elsif a == 0
puts "zero"
else
puts a
end
p! (
if a < 0
"minus"
elsif a > 0
"plus"
elsif a == 0
"zero"
else
a
end
)
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
NaN
(if a < 0
"minus"
else
if a > 0
"plus"
else
if a == 0
"zero"
else
a
end
end
end) # => NaN
</syntaxhighlight>
:; elsif節:ifは、オプショナルな elsif 節を設け、条件式が偽であった時に別の条件に合致した処理を実行させることが出来ます。
:; else節:ifは、オプショナルな else 節を設け、条件式が偽であった時に処理を実行させることが出来ます。
: ifは値を返すので、メソッドの実引数に使うことが出来ますし、代入演算の右辺にも使えます。
==== 後置のif ====
Crystalには、RubyやPerlのような後置のifがあります。
;後置のifの例:<syntaxhighlight lang=crystal>
n = 0
puts "nは0" if n == 0
puts "nは1" if n == 1
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
nは0
</syntaxhighlight>
==== unless====
'''unless'''(アンレス)は条件式によって実行・否を切り替える構造構文ですが、ifとは条件式に対する挙動が逆です。
;unless文の例:<syntaxhighlight lang=crystal line>
a = 0.0 / 0.0
unless a == 0
puts "Non-zero"
else
puts a
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Non-zero
</syntaxhighlight>
:; else節 : unless文は、オプショナルな else 節を設け、条件式が真であった時に処理を実行させることが出来ます。
::また、unless文は elsif 節は持てません。
==== 後置のunless ====
Crystalには、RubyやPerlのような後置のunlessがあります。
;後置のunlessの例:<syntaxhighlight lang=crystal>
n = 0
puts "nは0" unless n == 0
puts "nは1" unless n == 1
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
nは1ではない
</syntaxhighlight>
==== case ====
caseは、複数の条件式によって処理を降る分ける用途の為に用意されています。
;caseの例:<syntaxhighlight lang=crystal line>
n = 2
case n
when 1
puts "one"
when 2
puts "two"
when 3
puts "three"
else
puts "other"
end
p! (
case n
when 1
"one"
when 2
"two"
when 3
"three"
else
"other"
end
)
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
two
(case n
when 1
"one"
when 2
"two"
when 3
"three"
else
"other"
end) # => "two"</syntaxhighlight>
:C言語系のswitch文に慣れた人はbreakがないことに気がつくと思います。Crystalのcaseはfall throughしませんし、fall throughさせる方法もありません。
===== when節が定数でなく式を受付けます =====
[[#if|if]]を使ったコードをcaseに書き換えてみましょう。
;case の式の省略:<syntaxhighlight lang=crystal line>
a = 0.0 / 0.0
case
when a < 0
puts "minus"
when a > 0
puts "plus"
when a == 0
puts "zero"
else
puts a
end
p! (
case true
when a < 0
"minus"
when a > 0
"plus"
when a == 0
"zero"
else
a
end
)
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
NaN
(case true
when a < 0
"minus"
when a > 0
"plus"
when a == 0
"zero"
else
a
end) # => NaN
</syntaxhighlight>
このコードは when 節の式の値とcaseの式を <code>===</code> で比較し、最初に一致した when に対応する式が実行される事を利用しています。
===== 型による分岐 =====
when 節が式ではなく型であった場合、caseの式を <code>is_a?</code> で評価し、最初に一致した when に対応する式が実行されます。
;型による分岐:<syntaxhighlight lang=crystal line>
p! 0.class,
0.is_a?(Object),
0.is_a?(Int32),
0.is_a?(Number),
0.is_a?(String)
case 0
when String
puts "String"
when Number
puts "Number"
when Int32
puts "Int32"
when Object
puts "Object"
else
puts "Unknown"
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
0.class # => Int32
0.is_a?(Object) # => true
0.is_a?(Int32) # => true
0.is_a?(Number) # => true
0.is_a?(String) # => false
Number
</syntaxhighlight>
暗黙のオブジェクト構文を使うと
:<syntaxhighlight lang=crystal line>
case 0
when .is_a?(String)
puts "String"
when .is_a?(Number)
puts "Number"
when .is_a(Int32)
puts "Int32"
when .is_a(Object)
puts "Object"
else
puts "Unknown"
end
</syntaxhighlight>
:と書くことが出来ます。
:: メソッドは、.is_a? に限定しないので、 .odd? .even? .include? など Bool を返すメソッドなら何でも使えます。
when に対応する式は、1つのことが珍しくないので、その場合は省略可能な then を補うと、1行で書けます。
:<syntaxhighlight lang=crystal line>
case 0
when String then puts "String"
when Number then puts "Number"
when Int32 then puts "Int32"
when Object then puts "Object"
else puts "Unknown"
end
</syntaxhighlight>
[TODO:タプルとダミー識別子 _ ]
===== 網羅性の検査 =====
when の代わりに in を使用すると、exhaustive case 式が作成されます。exhaustive case では、必要な in 条件を省略するとコンパイル時にエラーとなります。排他的論理和では、when 節と else 節を含むことはできません。
コンパイラは、以下の in 条件をサポートしています。
:<syntaxhighlight lang=crystal line>
case 0
when String then puts "String"
when Number then puts "Number"
when Int32 then puts "Int32"
when Object then puts "Object"
else puts "Unknown"
end
</syntaxhighlight>
caseの式がユニオンの場合、各要素型を条件として使用することができる。
;組合型チェック:<syntaxhighlight lang=crystal line>
var : ( Bool | Int32 | Float64 )?
var = 3.14
p! (
case var
in Bool then var ? 1 : 0
in Int32 then var
in Float64 then var.to_i
end
)
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
(case var
in Bool
var ? 1 : 0
in Int32
var
in Float64
var.to_i
end) # => 3
</syntaxhighlight>
[TODO:case in は enum にも使える]
[TODO:短絡評価 && || ]
=== 繰返し ===
Crystalには、他のプログラミング言語のような[[#繰返し構文|繰返し構文]]と、[[#イテレーターメソッド|イテレーターメソッド]]があります。
==== 繰返し構文 ====
Crystalの繰返し構文には、while と untilの2つがあります<ref>for も do-while も loop もありません。</ref>。
===== while =====
while(ホワイル)は条件が'''真'''である間、式を実行しつづけます。
;構文:<syntaxhighlight lang=crystal>
while 条件式
式1
式2
:
式n
end
</syntaxhighlight>
: Rubyと違い、条件式の後ろに <code>do</code> をつけることは出来ません。
;while文のコード例:<syntaxhighlight lang=crystal line>
i = 0
p! (
while i < 10
p! i
i += 1
break i if i > 5
end
)
</syntaxhighlight>
: 2行目の <code>i < 5</code>が真の間、次の2行を繰返します。
: 4行目の <code>i += 1</code> は <code>i = i + 1</code> の構文糖
;実行結果:<syntaxhighlight lang="text">
(while i < 10
p!(i)
i = i + 1
if i > 5
break i
end
end)# =>
i # => 0
i # => 1
i # => 2
i # => 3
i # => 4
i # => 5
6
</syntaxhighlight>
===== until =====
until(アンティル)は条件が'''偽'''である間、式を実行しつづけます。whileとは条件に対する挙動が逆です。
;構文:<syntaxhighlight lang=crystal>
until 条件式 [ do ]
文1
文2
:
文n
end
</syntaxhighlight>
: <code>do</code> は省略できます。
;untilのコード例:<syntaxhighlight lang=crystal line>
i = 0
until i == 3
puts i
i += 1
end
</syntaxhighlight>
: 2行目の <code>i == 3</code>が偽の間、次の2行を繰返します。
;実行結果:<syntaxhighlight lang="text">
0
1
2
</syntaxhighlight>
===== for =====
Crystalにはforがありませんが、コレクションのイテレーションメソッドを使うことで繰返しを簡素に実現出来ます。
==== Rangeオブジェクト ====
Rangeオブジェクトは、整数の区間を表し範囲演算子 <code>開始 ... 終了</code> で生成します。
;コード:<syntaxhighlight lang=crystal>
rng = 1..3
puts rng.class
rng.each do | n |
puts "#{n}番";
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Range(Int32, Int32)
1番
2番
3番
</syntaxhighlight>
==== Arrayオブジェクト ====
Arrayオブジェクトは、任意の Crystal オブジェクトを要素として持つことができます。
配列式<code>[要素1, 要素2, … 要素n]</code> で生成します。
;コード:<syntaxhighlight lang=crystal>
animals = ["ネコ", "金魚", "ハムスター"]
puts animals.class
animals.each do | animal |
puts "動物 #{animal}"
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Array(String)
動物 ネコ
動物 金魚
動物 ハムスター
</syntaxhighlight>
==== NamedTupleオブジェクト ====
NamedTupleオブジェクトは、任意の Crystal オブジェクトをキーに、任意の Crystal オブジェクトを値に持つことができる連想配列です。
NamedTuple式<code>{キー1 => 値1, キー2 => 値2, キーn => 値n}</code> で生成します。
また、キーが Symbol の場合
NamedTuple式<code>{キー1: 値1, キー2: 値2, キーn: 値n}</code> で生成することが出来ます。
;コード:<syntaxhighlight lang=crystal>
animals = {cat: "ネコ", gold_fish: "金魚", hamster: "ハムスター"}
puts animals.class
animals.each do | en, animal |
puts "動物 #{en}: #{animal}"
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
NamedTuple(cat: String, gold_fish: String, hamster: String)
動物 cat: ネコ
動物 gold_fish: 金魚
動物 hamster: ハムスター
</syntaxhighlight>
このように、Crystalではforがなくてもコレクションのメソッドで同様の処理を実現できます。
===== loop =====
loop、ありません。
while true で代用します。
;loopの代用コード例:<syntaxhighlight lang=crystal line>
i = 1
while true
puts "0b%b" % i
i <<= 1
break if i > 2**8
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
0b1
0b10
0b100
0b1000
0b10000
0b100000
0b1000000
0b10000000
0b100000000
</syntaxhighlight>
:5行目の、<code>break if i > 2**8</code>でループを脱出するようにしています。この様に break や return あるいは例外が上がらないとループは永久に終わりません。
:このコードは、Crystalにはない do-while文を模倣する例にもなっています。
==== イテレーターメソッド ====
===== Integer#times =====
Integer#timesは与えられたブロックをオブジェクトの示す整数値回くりかえします。
:コード<syntaxhighlight lang=crystal>
3.times{ puts "Hello, world!" }
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Hello, world!
Hello, world!
Hello, world!
</syntaxhighlight>
;繰返したい処理が2行以上ある場合:<syntaxhighlight lang=crystal>
3.times {
puts "Hello"
puts "World"
puts ""
}
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Hello
World
Hello
World
Hello
World
</syntaxhighlight>
;ループ変数を使た例:<syntaxhighlight lang=crystal>
3.times do |i|
puts "#{i}の倍は#{2 * i}"
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
0の倍は0
1の倍は2
2の倍は4
</syntaxhighlight>
;ブロックを伴わないtimesメソッド:<syntaxhighlight lang=crystal>
iter = 3.times
puts iter.class
p! iter.next
p! iter.next
p! iter.next
p! iter.next
p! iter.next
p! iter.next
# puts iter.next # `next': StopIteration: iteration reached an end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Int::TimesIterator(Int32)
iter.next # => 0
iter.next # => 1
iter.next # => 2
iter.next # => #<Iterator::Stop:0x7fb5bedd7fe0>
iter.next # => #<Iterator::Stop:0x7fb5bedd7fe0>
iter.next # => #<Iterator::Stop:0x7fb5bedd7fe0>
</syntaxhighlight>
: Integer#times にブロックを渡さないと、Int::TimesIterator([T])オブジェクトが返ります。
: Int::TimesIterator([T])オブジェクトは外部イテレーターと呼ばれnextメソッドで反復を行えます。
== 脚註 ==
<references />
== 外部リンク ==
* [https://crystal-lang.org/ The Crystal Programming Language] {{---}} 公式サイト
** [https://crystal-lang.org/api/1.5.0/ Crystal 1.5.0 リファレンス]
** [https://play.crystal-lang.org/#/cr Compile & run code in Crystal] {{---}} playground
[[Category:Crystal|*]]
[[Category:プログラミング言語]]
{{NDC|007.64}}
ioep12y3i7v6sxeaixmcma86m7n8mgm
205703
205680
2022-07-22T22:34:49Z
Ef3
694
/* クラスのメソッド一覧 */ Crystal には、Objectクラスにmethodsメソッドがないので、マクロで実装しました。
wikitext
text/x-wiki
{{Pathnav|メインページ|工学|情報技術|プログラミング|frame=1}}
{{Wikipedia|Crystal (プログラミング言語)}}
本書は、[[w:Crystal (プログラミング言語)|Crystal]]のチュートリアルです。
'''Crystal'''は、Ary Borenszweig、Juan Wajnerman、Brian Cardiffと300人以上の貢献者によって設計・開発された[汎用オブジェクト指向プログラミング言語です<ref>{{Cite web
|url=https://github.com/crystal-lang/crystal/graphs/contributors
|title=Contributors
|accessdate=2022-07-18
|website=github.com
}}</ref>。[[Crystal]] にヒントを得た構文を持ち、静的型チェックを備えた [[コンパイル型言語]]ですが、変数やメソッドの引数の型は一般には不要です。型は高度なグローバル[[型推論]]アルゴリズムによって解決される。<ref>{{Cite web
|url=http://crystal-lang.org/2013/09/23/type-inference-part-1.html
|title=Type inference part 1
|last=Brian J.
|first=Cardiff
|date=2013-09-09
|accessdate=2022-07-18
|website=crystal-lang.org
}}</ref>Crystalは[[Apache License]]バージョン2.0のもと、FOSSとしてリリースされています。
__TOC__
== Hello, World! ==
他の多くのチュートリアルがそうであるように、
私たちもまずはCrystalの世界にあいさつすることから始めましょう。
''hello.cr''というファイルを作り(Crystalのソースファイルの拡張子は''.cr'' です)、次のように書いて保存して下さい。
;hello.cr:<syntaxhighlight lang=Crystal>
puts 'Hello, World!'
</syntaxhighlight>
;コマンドラインでの操作:<syntaxhighlight lang="console">
% cat hello.cr
puts 'Hello, World!'
% crystal hello.cr
In hello.cr:1:6
1 | puts 'Hello, World!'
^
Error: unterminated char literal, use double quotes for strings
% sed -i -e "s@'@Q@g" -e 's@Q@"@g' hello.cr
% cat hello.cr
puts "Hello, World!"
% crystal hello.cr
Hello, World!
</syntaxhighlight>
この1行のスクリプトは、メソッド<code>puts</code> に文字リテラル<code>"Hello, World!"</code>を渡し呼出しています。
このプログラムは、[[Ruby#Hello, World!]]と同じですが、Crystalでは文字列リテラルは <code>"…"</code> で囲うのでそれだけ変更しました。
[TODO: コマンドラインツール crystal の解説。 crystal ファイル名 は crystal run ファイル名 の短縮形で、インタープリタ的な実行…ではなく、内部ビルドツールでコンパイル・実行を行う]
== Ruby との違い ==
Crystalは、Rubyに触発された構文を持つものの、Rubyとの互換性をゴールに定めては'''いません'''。
このため、細部を見ると仕様に差異があり、Rubyのソースコードをcrystalに掛けるても前節の 'Hello World' の様にコンパイルに失敗することがあります。
また、コンパイルできても実行結果に違いが出ることがあります。
ここでは、Ruby との違いについて実際のコードと双方の結果を比較することで、差異についての理解を深めていきます。
=== 整数型の特性 ===
;大きな整数:<syntaxhighlight lang=Crystal>
p 2 ** 999
p (2 ** 999).class
</syntaxhighlight>
;rubyの実行結果:<syntaxhighlight lang="console">
5357543035931336604742125245300009052807024058527668037218751941851755255624680612465991894078479290637973364587765734125935726428461570217992288787349287401967283887412115492710537302531185570938977091076523237491790970633699383779582771973038531457285598238843271083830214915826312193418602834034688
Integer
</syntaxhighlight>
;crystalの実行結果:<syntaxhighlight lang="console">
Unhandled exception: Arithmetic overflow (OverflowError)
from /usr/local/share/crystal/share/crystal/src/int.cr:295:9 in '**'
from pow.cr:1:1 in '__crystal_main'
from /usr/local/share/crystal/share/crystal/src/crystal/main.cr:115:5 in 'main_user_code'
from /usr/local/share/crystal/share/crystal/src/crystal/main.cr:101:7 in 'main'
from /usr/local/share/crystal/share/crystal/src/crystal/main.cr:127:3 in 'main'
from /usr/local/lib64/libc.so.6 in '__libc_start_main'
from /usr/local/.cache/crystal/crystal-run-pow.tmp in '_start'
from ???
</syntaxhighlight>
: Ruby の整数は、桁あふれが起こると自動的に多倍長整数に型変換されるので、継ぎ目なしに大きな数を扱うアルゴルズムが使えます。
: Crystal の整数は、固定長です(大きさについては[[#リテラルと型|後述]])。なので大きな答えになる式を評価すると桁あふれが生じます。桁あふれが生じますが、C言語のように寡黙に処理を続けるのではなく、実行時に例外(OverflowError)が上がるので、例外を捕捉し然るべき処置を施すことが可能です。
==== BigInt ====
<code>big</code> を <code>require</code> すると <code>BigInt</code> が使えるようになります。
;BigInt:<syntaxhighlight lang=Crystal>
require "big"
p BigInt.new(2) ** 999
p (BigInt.new(2) ** 999).class
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="console">
5357543035931336604742125245300009052807024058527668037218751941851755255624680612465991894078479290637973364587765734125935726428461570217992288787349287401967283887412115492710537302531185570938977091076523237491790970633699383779582771973038531457285598238843271083830214915826312193418602834034688
BigInt
</syntaxhighlight>
: BigIntはプリミティブではなので、リテラル表現はありません。また、
::<syntaxhighlight lang=Crystal>
n : BigInt = 2
</syntaxhighlight>
::<syntaxhighlight lang=console>
Error: type must be BigInt, not Int32
</syntaxhighlight>
:: のように型アノテーションすることも出来ません。
=== リテラルと型 ===
;様々なリテラルと型:<syntaxhighlight lang=Crystal>
[nil, false, true, 42, 2.73, 'Q', "string", [1,2,3], {a:1, b:2}].each{|x|
p [x, x.class]
}
</syntaxhighlight>
;rubyの実行結果:<syntaxhighlight lang="console">
[nil, NilClass]
[false, FalseClass]
[true, TrueClass]
[42, Integer]
[2.73, Float]
["Q", String]
["string", String]
[[1, 2, 3], Array]
[{:a=>1, :b=>2}, Hash]
</syntaxhighlight>
;crystalの実行結果:<syntaxhighlight lang="console">
[nil, Nil]
[false, Bool]
[true, Bool]
[42, Int32]
[2.73, Float64]
['Q', Char]
["string", String]
[[1, 2, 3], Array(Int32)]
[{a: 1, b: 2}, NamedTuple(a: Int32, b: Int32)]
</syntaxhighlight>
: Crystal の整数は Int32、浮動小数点数は Float64 です。
;サイズを指定した数リテラル:<syntaxhighlight lang=Crystal>
[1_i64, 2_u32, 3_u64, 4_i32, 5_i16, 6_u8, 7_i128, 8_u128, 3.14_f32, 1.44_f64].each{|x|
p [x, x.class]
}
</syntaxhighlight>
;ruby:Rubyでは、サーフィックスの付いた数値リテラルは無効
;crystalの実行結果:<syntaxhighlight lang="console">
[1, Int64]
[2, UInt32]
[3, UInt64]
[4, Int32]
[5, Int16]
[6, UInt8]
[7, Int128]
[8, UInt128]
[3.14, Float32]
[1.44, Float64]
</syntaxhighlight>
: Crystal では、数値リテラルに _ で始まるサーフィックスを付け { i:符号付き整数, u:符号なし整数, f:浮動小数点数 } と { 8,16,32,64,128 } のビット幅の組合せです<ref>[https://crystal-lang.org/reference/1.5/syntax_and_semantics/literals/ Literals]</ref>。
=== for式がない ===
Crystal には、Ruby にはある for式がありません。
;Rubyのfor式の構文:<syntaxhighlight lang="ruby">
for 変数 in コレクション
文
end
</syntaxhighlight>
:コレクションは Range, Array, Hash など内部構造を持つオブジェクトです。
:for式は、最後に評価した値を返すので、for'''式'''です。
;for式のeachメソッドによる置換え:<syntaxhighlight lang="ruby">
for x in [ 2, 3, 5, 7, 11 ] do
p x
end
# ↓
[ 2, 3, 5, 7, 11 ].each do | x |
p x
end
</syntaxhighlight>
: の様にコレクションの each メソッドで置換え可能なので、Rubyからの移植でも小規模な書換えで済みます<ref>[https://github.com/crystal-lang/crystal/issues/830 "For" Loop support #830]</ref>(後述のマクロで実装できないかと思いましたが、いまのところ無理のようです)。
また loop 式もありませんが while true; … end で間に合います。Ruby では while 式の条件の次に do が置けますが、Crystal では置けません。
=== eval()がない ===
Crystal には eval() はありません。
Crystalはコンパイル型言語ですので、無理もないことです。
もし、Crystal で eval() を実装しようとすると、Common Lisp の様にインタープリターを丸ごとランタイムに含む必要があります。
これはリーズナブルな選択ではありません。
Crystal では、eval() が必要なケースに(限定的ですが)マクロを使うことが出来る可能性があります。
=== マクロ ===
Crystalには、Rubyにはないマクロがあります<ref>[https://crystal-lang.org/reference/1.5/syntax_and_semantics/macros/ Macros - Crystal]</ref>。Rubyは実行時にすべてのオブジェクトにアクセス出来て、メソッド生やし放題なのでマクロは必要ありませんが、Crystalはコンパイル時に型やメソッドを確定する必要があり、特にメソッドジェネレターとしてのマクロにニーズがあります。また、テンプレート言語的なマクロなので、環境変数による条件分岐や、コンテナを渡し繰返し処理する構文もあります(面白いことにマクロには for 文があり、反対にマクロの中では、eachメソッドは使えません)。マクロには <code><nowiki>{{</nowiki>attr.id}}</code> の様にASTへのアクセス手順が用意されており、半ば言語を拡張するようなアプローチを取ることも出来ます。
[TODO:ASTについての解説;コラム向き?]
;マクロを使ったattr_accessorのイミュレーション:<syntaxhighlight lang=crystal>
class Point
def initialize(@x : Int32, @y : Int32)
end
# macro定義
macro attr_accessor(*attrs)
{% for attr in attrs %}
def {{attr.id}}() @{{attr.id}} end
def {{attr.id}}=(var) @{{attr.id}} = var end
{% end %}
end
# macro呼出し
attr_accessor :x, :y
end
pt = Point.new(20, 30)
p [pt.x, pt.y]
t = pt.x
pt.x = pt.y
pt.y = t
p [pt.x, pt.y]
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
[20, 30]
[30, 20]
</syntaxhighlight>
: Ruby には、attr_accessor と言う「クラスのメンバーのアクセサーを自動生成するメソッド」がありますが、Crystalにはないようなので、マクロで実装しました。
:: attr_accessor :name からは
::<syntaxhighlight lang=ruby>
def name() @name end
def name=(val) @name = val end
</syntaxhighlight>相当のコードが生成されます。
[TODO:マクロの機能と構文の説明 *の付いた引数、 <nowiki>{{</nowiki>引数}}、{% … %} 構文]
==== マクロ p! ====
メソッド p は、与えられた「式」の inspaect() の返す値を puts しますが、マクロ p! は、それに先んじて(評価前の)「式」を表示します<ref>[https://crystal-lang.org/api/1.5.0/Crystal/Macros.html#p%21%28%2Aexpressions%29%3ANop-instance-method def p!(*expressions) : Nop]</ref>。
;p!の例:<syntaxhighlight lang=crystal>
x, y = true, false
p! x,y,x && y, x || y, x ^ y, !x, x != y, x == y
ary = [ 1, 2, 3 ]
p! ary
p! ary.map(&. << 1)
p! ary.map(&.to_f)
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
x # => true
y # => false
x && y # => false
x || y # => true
x ^ y # => true
!x # => false
x != y # => true
x == y # => false
ary # => [1, 2, 3]
ary.map(&.<<(1)) # => [2, 4, 6]
ary.map(&.to_f) # => [1.0, 2.0, 3.0]
</syntaxhighlight>
===== 入れ子のp! =====
マクロ p! は入れ子に出来ます。また、一旦ASTに変換してから再度ソースコードに変換するので、等価な別の構文に変換されることがあります。
;入れ子のp!:<syntaxhighlight lang=crystal>
p! (
100.times{|i|
p! i
break i if i > 12
}
)
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
(100.times do |i|
p!(i)
if i > 12
break i
end
end) # => i
# => 0
i # => 1
i # => 2
i # => 3
i # => 4
i # => 5
i # => 6
i # => 7
i # => 8
i # => 9
i # => 10
i # => 11
i # => 12
i # => 13
13
</syntaxhighlight>
=== クラス ===
==== シンプルなクラス ====
;シンプルなクラス:<syntaxhighlight lang=crystal highlight="2" line>
class Hello
def initialize(@name : String = "World")
end
def greeting
puts "Hello #{@name}!"
end
end
hello = Hello.new()
hello.greeting
universe = Hello.new("Universe")
universe.greeting
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
Hello World!
Hello Universe!
</syntaxhighlight>
:;初期化メソッド
:: <syntaxhighlight lang=crystal line start=4>
def initialize(@name : String = "World")
end
</syntaxhighlight>
::Rubyであれば
:: <syntaxhighlight lang=ruby line start=4>
def initialize(name = "World")
@name = name
end
</syntaxhighlight>
::とするところですが、Crystalでは、型アノテーション <code> : String</code> を使い、引数の型を限定しました。
::また、(@ 付きの)アトリビュート名を仮引数にすると、そのままアトリビュート(a.k.a. インスタンス変数)に仮引数が代入されます。
::これは、C++のコンストラクターのメンバー初期化リストと同じアイディアですが、Crystalではインスタンス変数に @ が前置されるので、仮引数に @ が出現すればインスタンス変数の初期値だと自明で、聡明な選択です。
==== 都市間の大圏距離 ====
[[Ruby#ユーザー定義クラス]]の都市間の大圏距離を求めるメソッドを追加した例を、Crystalに移植しました。
;都市間の大圏距離:<syntaxhighlight lang=crystal highlight=”2,7,12” line>
class GeoCoord
getter :longitude, :latitude
def initialize(@longitude : Float64, @latitude : Float64)
end
def to_s(io)
ew, ns = "東経", "北緯"
long, lat = @longitude, @latitude
ew, long = "西経", -long if long < 0.0
ns, lat = "南緯", -lat if lat < 0.0
io << "(#{ew}: #{long}, #{ns}: #{lat})"
end # https://github.com/crystal-lang/crystal/issues/259
def distance(other)
i, r = Math::PI / 180, 6371.008
Math.acos(Math.sin(@latitude*i) * Math.sin(other.latitude * i) +
Math.cos(@latitude*i) * Math.cos(other.latitude * i) * Math.cos(@longitude * i - other.longitude * i)) * r
end
end
# メソッドの先頭を大文字に出来ないのでクラス名のメソッドは作ることが出来ない
# def GeoCoord(lng : Float64, lat : Float64)
# GeoCoord.new(lng, lat)
# end
Sites = {
"東京駅": GeoCoord.new(139.7673068, 35.6809591),
"シドニー・オペラハウス": GeoCoord.new(151.215278, -33.856778),
"グリニッジ天文台": GeoCoord.new(-0.0014, 51.4778),
}
Sites.each { |name, gc|
puts "#{name}: #{gc}"
}
puts ""
keys, len = Sites.keys, Sites.size
keys.each_with_index { |x, i|
y = keys[(i + 1) % len]
puts "#{x} ⇔ #{y}: #{Sites[x].distance(Sites[y])} [km]"
}
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
東京駅: (東経: 139.7673068, 北緯: 35.6809591)
シドニー・オペラハウス: (東経: 151.215278, 南緯: 33.856778)
グリニッジ天文台: (西経: 0.0014, 北緯: 51.4778)
東京駅 ⇔ シドニー・オペラハウス: 7823.269299386704 [km]
シドニー・オペラハウス ⇔ グリニッジ天文台: 16987.2708377249 [km]
グリニッジ天文台 ⇔ 東京駅: 9560.546566490015 [km]
</syntaxhighlight>
:Crystal には、<syntaxhighlight lang=ruby inline> attr_accessor </syntaxhighlight> はありませんが、標準ライブラリーのマクロに <syntaxhighlight lang=crystal inline> getter </syntaxhighlight>があるので
:: <syntaxhighlight lang=crystal line start=2>
getter :longitude, :latitude
</syntaxhighlight>
::としました。
::将来、<syntaxhighlight lang=ruby inline> attr_accessor </syntaxhighlight> が実装される可能性はありますが、姉妹品の<syntaxhighlight lang=crystal inline> setter </syntaxhighlight> との併用が下位互換性を考えると確実です。
: to_s は、Ruby ならば
:: <syntaxhighlight lang=ruby line start=7>
def to_s()
</syntaxhighlight>
:: <syntaxhighlight lang=ruby line start=12>
"(#{ew}: #{long}, #{ns}: #{lat})"
</syntaxhighlight>
:: ですが、Crystalでは追加の引数 <var>io</var> が必要で
:: <syntaxhighlight lang=ruby line start=7>
def to_s(io)
</syntaxhighlight>
:: <syntaxhighlight lang=ruby line start=12>
io << "(#{ew}: #{long}, #{ns}: #{lat})"
</syntaxhighlight>
: Ruby にはクラス名と同じ名前のメソッドで .new を呼出す文化があるのですが、Crystalはメソッドの先頭を大文字に出来ないので、これは見送りました。
==== 包含と継承 ====
[[JavaScript/クラス#包含と継承]]を、Rubyに移植した[[Ruby#包含と継承]]を、Crystalに移植しました。
;包含と継承の例:<syntaxhighlight lang=crystal line>
class Point
def initialize(@x = 0, @y = 0)
end
def inspect(io)
io << "x:#{@x}, y:#{@y}"
end
def move(dx = 0, dy = 0)
@x, @y = @x + dx, @y + dy
self
end
end
class Shape
def initialize(x = 0, y = 0)
@location = Point.new(x, y)
end
def inspect(io)
@location.inspect(io)
end
def move(x, y)
@location.move(x, y)
self
end
end
class Rectangle < Shape
def initialize(x = 0, y = 0, @width = 0, @height = 0)
super(x, y)
end
def inspect(io)
super(io)
io << ", width:#{@width}, height:#{@height}"
end
end
rct = Rectangle.new(12, 32, 100, 50)
p! rct,
rct.is_a?(Rectangle),
rct.is_a?(Shape),
rct.is_a?(Point),
rct.move(11, 21)
(END)</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
rct # => x:12, y:32, width:100, height:50
rct.is_a?(Rectangle) # => true
rct.is_a?(Shape) # => true
rct.is_a?(Point) # => false
rct.move(11, 21) # => x:23, y:53, width:100, height:50
</syntaxhighlight>
;crystal tool hierarchy:<syntaxhighlight lang=console>
% crystal tool hierarchy inclusion-and-inheritance.cr -e Shape
- class Object (4 bytes)
|
+- class Reference (4 bytes)
|
+- class Shape (16 bytes)
. @location : Point (8 bytes)
|
+- class Rectangle (24 bytes)
@width : Int32 (4 bytes)
@height : Int32 (4 bytes)
</syntaxhighlight>
: crystal の tool hierarchy サブコマンドで、クラスの継承関係がわかります。
==== 抽象クラス ====
[[Java/抽象クラス]]を、Crystalに移植しました。
;抽象クラスの宣言:<syntaxhighlight lang=Java>
abstract class クラス名
#
end
</syntaxhighlight>
: このクラス名は、 .new でインスタンス化出来ません。
:: Error: can't instantiate abstract class クラス名
: となります。
:インスタンス化することは出来ませんが、抽象クラスを別のクラスが継承する事は出来ます。
:また、抽象クラスを <code>super()</code> を使うことでメソッドを呼び出せるので、抽象メソッドではないメソッド(具象メソッド)を持つことも、インスタンス変数も持つことも出来ます。
:'''抽象クラスの例'''では、Shapeのinitializeメソッドが抽象クラスの具象メソッドとなっています。
;抽象メソッドの宣言:<syntaxhighlight lang=Java>
abstract def メソッド名
</syntaxhighlight>
: 派生先のクラスで、「メソッド名」を定義(def)し忘れると
:: Error: abstract `def クラス名#メソッド名()` must be implemented by クラス名
: となります
;抽象クラスの例:<syntaxhighlight lang=crystal line>
abstract class Shape
def initialize(@x = 0.0, @y = 0.0)
end
abstract def to_s(io)
abstract def area
end
class Square < Shape
def initialize(x, y, @wh = 0.0)
super(x, y)
end
def to_s(io)
io << "Square(#{@x}, #{@y}, #{@wh})"
end
def area
@wh * @wh
end
end
abstract class Shape
def initialize(@x = 0.0, @y = 0.0)
end
abstract def to_s(io)
abstract def area
end
class Square < Shape
def initialize(x, y, @wh = 0.0)
super(x, y)
end
def to_s(io)
io << "Square(#{@x}, #{@y}, #{@wh})"
end
def area
@wh * @wh
end
end
class Recrangle < Shape
def initialize(x, y, @w = 0.0, @h = 0.0)
super(x, y)
end
def to_s(io)
io << "Rectanle(#{@x}, #{@y}, #{@w}, #{@h})"
end
def area
@w * @h
end
end
class Circle < Shape
def initialize(x, y, @r = 0.0)
super(x, y)
end
def to_s(io)
io << "Circle(#{@x}, #{@y}, #{@r})"
end
def area
3.1425926536 * @r * @r
end
end
shapes = [
Square.new(5.0, 10.0, 15.0),
Recrangle.new(13.0, 23.0, 20.0, 10.0),
Circle.new(3.0, 2.0, 20.0),
] of Shape
shapes.each do |shape|
puts("#{shape}: #{shape.area}")
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
Square(5.0, 10.0, 15.0): 225.0
Rectanle(13.0, 23.0, 20.0, 10.0): 200.0
Circle(3.0, 2.0, 20.0): 1257.03706144
</syntaxhighlight>
;crystal tool hierarchy:<syntaxhighlight lang=console>
% crystal tool hierarchy abstract.cr -e Shape
- class Object (4 bytes)
|
+- class Reference (4 bytes)
|
+- class Shape (24 bytes)
. @x : Float64 (8 bytes)
. @y : Float64 (8 bytes)
|
+- class Circle (32 bytes)
| @r : Float64 (8 bytes)
|
+- class Recrangle (40 bytes)
| @w : Float64 (8 bytes)
| @h : Float64 (8 bytes)
|
+- class Square (32 bytes)
@wh : Float64 (8 bytes)
</syntaxhighlight>
: crystal の tool hierarchy サブコマンドで、クラスの継承関係がわかります。
: 「包含と継承の例」と比べると、ShapeとRectangleが同じ階層にあることがわかると思います。
[TODO:virtual class::いい例がない]
== キーワード ==
Crystalのキーワード( ''keywords'' ) は、以下の通り。
<code>abstract</code> <code>alias</code> <code>as</code> <code>asm</code> <code>begin</code> <code>break</code> <code>case</code> <code>class</code> <code>def</code> <code>do</code> <code>else</code> <code>elsif</code> <code>end</code> <code>ensure</code> <code>enum</code> <code>extend</code> <code>for</code> <code>fun</code> <code>if</code> <code>include</code> <code>instance_sizeof</code> <code>lib</code> <code>macro</code> <code>module</code> <code>next</code> <code>of</code> <code>out</code> <code>pointerof</code> <code>private</code> <code>protected</code> <code>rescue</code> <code>return</code> <code>require</code> <code>select</code> <code>sizeof</code> <code>struct</code> <code>super</code> <code>then</code> <code>type</code> <code>typeof</code> <code>uninitialized</code> <code>union</code> <code>unless</code> <code>until</code> <code>when</code> <code>while</code> <code>with</code> <code>yield</code>
<!--
<code>__DIR__</code> <code>__END_LINE__</code> <code>__FILE__</code> <code>__LINE__</code>
-->
== 演算子 ==
Crystalは、1つ、2つ、または3つのオペランドを持つ数多くの演算子をサポートしています<ref>[https://crystal-lang.org/reference/1.5/syntax_and_semantics/operators.html Operators]access-date:2022-07-22</ref>。
演算子式は、実際にはメソッド呼び出しとしてパースされます。例えば、<code>a + b</code> は <code>a.+(b)</code> と意味的に同じで、引数 b を持つ a のメソッド + を呼び出すことになります。
{| class="wikitable"
|+ 演算子の優先度
!種類
!演算子
|-
|インデックス アクセサー
|<code>[]</code>, <code>[]?</code>
|-
|単項
|<code>+</code>, <code>&+</code>, <code>-</code>, <code>&-</code>, <code>!</code>, <code>~</code>
|-
|指数
|<code>**</code>, <code>&**</code>
|-
|乗除
|<code>*</code>, <code>&*</code>, <code>/</code>, <code>//</code>, <code>%</code>
|-
|加減
|<code>+</code>, <code>&+</code>, <code>-</code>, <code>&-</code>
|-
|シフト
|<code><<</code>, <code>>></code>
|-
|ビット間 AND
|<code>&</code>
|-
|ビット間 OR/XOR
|<code><nowiki>|</nowiki></code>,<code>^</code>
|-
|等値
|<code>==</code>, <code>!=</code>, <code>=~</code>, <code>!~</code>, <code>===</code>
|-
|比較
|<code><</code>, <code><=</code>, <code>></code>, <code>>=</code>, <code><=></code>
|-
|論理 AND
|<code>&&</code>
|-
|論理 OR
|<code><nowiki>||</nowiki></code>
|-
|Range
|<code>..</code>, <code>...</code>
|-
|条件
|<code>?:</code>
|-
|代入
|<code>=</code>, <code>[]=</code>, <code>+=</code>, <code>&+=</code>, <code>-=</code>, <code>&-=</code>, <code>*=</code>, <code>&*=</code>, <code>/=</code>, <code>//=</code>, <code>%=</code>, <code><nowiki>|=</nowiki></code>, <code>&=</code>,<code>^=</code>,<code>**=</code>,<code><<=</code>,<code>>>=</code>, <code><nowiki>||=</nowiki></code>, <code>&&=</code>
|-
|スプラット
|<code>*</code>, <code>**</code>
|}
== 制御構造 ==
'''[[w:制御構造|制御構造]]'''(せいぎょこうぞう、''control flow'')とは、「順次」「分岐」「反復」という基本的な処理のことを言います。
{{コラム|Crystalの真理値|2=
制御構造は「条件式」が真であるか偽であるかによって分岐や反復の振る舞いが変わります。
では「条件式」が真・偽はどの様に決まるのでしょう?
Crystalでは <code>false</code> あるいは <code>nil</code> であると偽、それ以外が真です。
なので <code>0</code> も <code>[]</code>(空のArray) も <code>{}</code>(空のNamedTuple)も真です。
}}
=== 条件分岐 ===
Crystalの条件分岐には、[[#if|if]], [[#until|until]] と [[#case|case]]の3つの構文があります。
==== if ====
'''[[w:if|if]]'''は条件式によって実行・否を切り替える構造構文で、評価した式の値を返すので条件演算子でもあります。
;ifの例:<syntaxhighlight lang=crystal line>
a = 0.0 / 0.0
if a < 0
puts "minus"
elsif a > 0
puts "plus"
elsif a == 0
puts "zero"
else
puts a
end
p! (
if a < 0
"minus"
elsif a > 0
"plus"
elsif a == 0
"zero"
else
a
end
)
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
NaN
(if a < 0
"minus"
else
if a > 0
"plus"
else
if a == 0
"zero"
else
a
end
end
end) # => NaN
</syntaxhighlight>
:; elsif節:ifは、オプショナルな elsif 節を設け、条件式が偽であった時に別の条件に合致した処理を実行させることが出来ます。
:; else節:ifは、オプショナルな else 節を設け、条件式が偽であった時に処理を実行させることが出来ます。
: ifは値を返すので、メソッドの実引数に使うことが出来ますし、代入演算の右辺にも使えます。
==== 後置のif ====
Crystalには、RubyやPerlのような後置のifがあります。
;後置のifの例:<syntaxhighlight lang=crystal>
n = 0
puts "nは0" if n == 0
puts "nは1" if n == 1
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
nは0
</syntaxhighlight>
==== unless====
'''unless'''(アンレス)は条件式によって実行・否を切り替える構造構文ですが、ifとは条件式に対する挙動が逆です。
;unless文の例:<syntaxhighlight lang=crystal line>
a = 0.0 / 0.0
unless a == 0
puts "Non-zero"
else
puts a
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Non-zero
</syntaxhighlight>
:; else節 : unless文は、オプショナルな else 節を設け、条件式が真であった時に処理を実行させることが出来ます。
::また、unless文は elsif 節は持てません。
==== 後置のunless ====
Crystalには、RubyやPerlのような後置のunlessがあります。
;後置のunlessの例:<syntaxhighlight lang=crystal>
n = 0
puts "nは0" unless n == 0
puts "nは1" unless n == 1
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
nは1ではない
</syntaxhighlight>
==== case ====
caseは、複数の条件式によって処理を降る分ける用途の為に用意されています。
;caseの例:<syntaxhighlight lang=crystal line>
n = 2
case n
when 1
puts "one"
when 2
puts "two"
when 3
puts "three"
else
puts "other"
end
p! (
case n
when 1
"one"
when 2
"two"
when 3
"three"
else
"other"
end
)
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
two
(case n
when 1
"one"
when 2
"two"
when 3
"three"
else
"other"
end) # => "two"</syntaxhighlight>
:C言語系のswitch文に慣れた人はbreakがないことに気がつくと思います。Crystalのcaseはfall throughしませんし、fall throughさせる方法もありません。
===== when節が定数でなく式を受付けます =====
[[#if|if]]を使ったコードをcaseに書き換えてみましょう。
;case の式の省略:<syntaxhighlight lang=crystal line>
a = 0.0 / 0.0
case
when a < 0
puts "minus"
when a > 0
puts "plus"
when a == 0
puts "zero"
else
puts a
end
p! (
case true
when a < 0
"minus"
when a > 0
"plus"
when a == 0
"zero"
else
a
end
)
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
NaN
(case true
when a < 0
"minus"
when a > 0
"plus"
when a == 0
"zero"
else
a
end) # => NaN
</syntaxhighlight>
このコードは when 節の式の値とcaseの式を <code>===</code> で比較し、最初に一致した when に対応する式が実行される事を利用しています。
===== 型による分岐 =====
when 節が式ではなく型であった場合、caseの式を <code>is_a?</code> で評価し、最初に一致した when に対応する式が実行されます。
;型による分岐:<syntaxhighlight lang=crystal line>
p! 0.class,
0.is_a?(Object),
0.is_a?(Int32),
0.is_a?(Number),
0.is_a?(String)
case 0
when String
puts "String"
when Number
puts "Number"
when Int32
puts "Int32"
when Object
puts "Object"
else
puts "Unknown"
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
0.class # => Int32
0.is_a?(Object) # => true
0.is_a?(Int32) # => true
0.is_a?(Number) # => true
0.is_a?(String) # => false
Number
</syntaxhighlight>
暗黙のオブジェクト構文を使うと
:<syntaxhighlight lang=crystal line>
case 0
when .is_a?(String)
puts "String"
when .is_a?(Number)
puts "Number"
when .is_a(Int32)
puts "Int32"
when .is_a(Object)
puts "Object"
else
puts "Unknown"
end
</syntaxhighlight>
:と書くことが出来ます。
:: メソッドは、.is_a? に限定しないので、 .odd? .even? .include? など Bool を返すメソッドなら何でも使えます。
when に対応する式は、1つのことが珍しくないので、その場合は省略可能な then を補うと、1行で書けます。
:<syntaxhighlight lang=crystal line>
case 0
when String then puts "String"
when Number then puts "Number"
when Int32 then puts "Int32"
when Object then puts "Object"
else puts "Unknown"
end
</syntaxhighlight>
[TODO:タプルとダミー識別子 _ ]
===== 網羅性の検査 =====
when の代わりに in を使用すると、exhaustive case 式が作成されます。exhaustive case では、必要な in 条件を省略するとコンパイル時にエラーとなります。排他的論理和では、when 節と else 節を含むことはできません。
コンパイラは、以下の in 条件をサポートしています。
:<syntaxhighlight lang=crystal line>
case 0
when String then puts "String"
when Number then puts "Number"
when Int32 then puts "Int32"
when Object then puts "Object"
else puts "Unknown"
end
</syntaxhighlight>
caseの式がユニオンの場合、各要素型を条件として使用することができる。
;組合型チェック:<syntaxhighlight lang=crystal line>
var : ( Bool | Int32 | Float64 )?
var = 3.14
p! (
case var
in Bool then var ? 1 : 0
in Int32 then var
in Float64 then var.to_i
end
)
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
(case var
in Bool
var ? 1 : 0
in Int32
var
in Float64
var.to_i
end) # => 3
</syntaxhighlight>
[TODO:case in は enum にも使える]
[TODO:短絡評価 && || ]
=== 繰返し ===
Crystalには、他のプログラミング言語のような[[#繰返し構文|繰返し構文]]と、[[#イテレーターメソッド|イテレーターメソッド]]があります。
==== 繰返し構文 ====
Crystalの繰返し構文には、while と untilの2つがあります<ref>for も do-while も loop もありません。</ref>。
===== while =====
while(ホワイル)は条件が'''真'''である間、式を実行しつづけます。
;構文:<syntaxhighlight lang=crystal>
while 条件式
式1
式2
:
式n
end
</syntaxhighlight>
: Rubyと違い、条件式の後ろに <code>do</code> をつけることは出来ません。
;while文のコード例:<syntaxhighlight lang=crystal line>
i = 0
p! (
while i < 10
p! i
i += 1
break i if i > 5
end
)
</syntaxhighlight>
: 2行目の <code>i < 5</code>が真の間、次の2行を繰返します。
: 4行目の <code>i += 1</code> は <code>i = i + 1</code> の構文糖
;実行結果:<syntaxhighlight lang="text">
(while i < 10
p!(i)
i = i + 1
if i > 5
break i
end
end)# =>
i # => 0
i # => 1
i # => 2
i # => 3
i # => 4
i # => 5
6
</syntaxhighlight>
===== until =====
until(アンティル)は条件が'''偽'''である間、式を実行しつづけます。whileとは条件に対する挙動が逆です。
;構文:<syntaxhighlight lang=crystal>
until 条件式 [ do ]
文1
文2
:
文n
end
</syntaxhighlight>
: <code>do</code> は省略できます。
;untilのコード例:<syntaxhighlight lang=crystal line>
i = 0
until i == 3
puts i
i += 1
end
</syntaxhighlight>
: 2行目の <code>i == 3</code>が偽の間、次の2行を繰返します。
;実行結果:<syntaxhighlight lang="text">
0
1
2
</syntaxhighlight>
===== for =====
Crystalにはforがありませんが、コレクションのイテレーションメソッドを使うことで繰返しを簡素に実現出来ます。
==== Rangeオブジェクト ====
Rangeオブジェクトは、整数の区間を表し範囲演算子 <code>開始 ... 終了</code> で生成します。
;コード:<syntaxhighlight lang=crystal>
rng = 1..3
puts rng.class
rng.each do | n |
puts "#{n}番";
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Range(Int32, Int32)
1番
2番
3番
</syntaxhighlight>
==== Arrayオブジェクト ====
Arrayオブジェクトは、任意の Crystal オブジェクトを要素として持つことができます。
配列式<code>[要素1, 要素2, … 要素n]</code> で生成します。
;コード:<syntaxhighlight lang=crystal>
animals = ["ネコ", "金魚", "ハムスター"]
puts animals.class
animals.each do | animal |
puts "動物 #{animal}"
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Array(String)
動物 ネコ
動物 金魚
動物 ハムスター
</syntaxhighlight>
==== NamedTupleオブジェクト ====
NamedTupleオブジェクトは、任意の Crystal オブジェクトをキーに、任意の Crystal オブジェクトを値に持つことができる連想配列です。
NamedTuple式<code>{キー1 => 値1, キー2 => 値2, キーn => 値n}</code> で生成します。
また、キーが Symbol の場合
NamedTuple式<code>{キー1: 値1, キー2: 値2, キーn: 値n}</code> で生成することが出来ます。
;コード:<syntaxhighlight lang=crystal>
animals = {cat: "ネコ", gold_fish: "金魚", hamster: "ハムスター"}
puts animals.class
animals.each do | en, animal |
puts "動物 #{en}: #{animal}"
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
NamedTuple(cat: String, gold_fish: String, hamster: String)
動物 cat: ネコ
動物 gold_fish: 金魚
動物 hamster: ハムスター
</syntaxhighlight>
このように、Crystalではforがなくてもコレクションのメソッドで同様の処理を実現できます。
===== loop =====
loop、ありません。
while true で代用します。
;loopの代用コード例:<syntaxhighlight lang=crystal line>
i = 1
while true
puts "0b%b" % i
i <<= 1
break if i > 2**8
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
0b1
0b10
0b100
0b1000
0b10000
0b100000
0b1000000
0b10000000
0b100000000
</syntaxhighlight>
:5行目の、<code>break if i > 2**8</code>でループを脱出するようにしています。この様に break や return あるいは例外が上がらないとループは永久に終わりません。
:このコードは、Crystalにはない do-while文を模倣する例にもなっています。
==== イテレーターメソッド ====
===== Integer#times =====
Integer#timesは与えられたブロックをオブジェクトの示す整数値回くりかえします。
:コード<syntaxhighlight lang=crystal>
3.times{ puts "Hello, world!" }
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Hello, world!
Hello, world!
Hello, world!
</syntaxhighlight>
;繰返したい処理が2行以上ある場合:<syntaxhighlight lang=crystal>
3.times {
puts "Hello"
puts "World"
puts ""
}
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Hello
World
Hello
World
Hello
World
</syntaxhighlight>
;ループ変数を使た例:<syntaxhighlight lang=crystal>
3.times do |i|
puts "#{i}の倍は#{2 * i}"
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
0の倍は0
1の倍は2
2の倍は4
</syntaxhighlight>
;ブロックを伴わないtimesメソッド:<syntaxhighlight lang=crystal>
iter = 3.times
puts iter.class
p! iter.next
p! iter.next
p! iter.next
p! iter.next
p! iter.next
p! iter.next
# puts iter.next # `next': StopIteration: iteration reached an end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Int::TimesIterator(Int32)
iter.next # => 0
iter.next # => 1
iter.next # => 2
iter.next # => #<Iterator::Stop:0x7fb5bedd7fe0>
iter.next # => #<Iterator::Stop:0x7fb5bedd7fe0>
iter.next # => #<Iterator::Stop:0x7fb5bedd7fe0>
</syntaxhighlight>
: Integer#times にブロックを渡さないと、Int::TimesIterator([T])オブジェクトが返ります。
: Int::TimesIterator([T])オブジェクトは外部イテレーターと呼ばれnextメソッドで反復を行えます。
==== クラスのメソッド一覧 ====
Crystal には、Objectクラスにmethodsメソッドがないので、マクロで実装しました。
;RubyのObject#methods:<syntaxhighlight lang=ruby>
p Object.methods.sort,
Integer.methods.sort,
Float.methods.sort,
Array.methods.sort,
Range.methods.sort
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
[:!, :!=, :!~, :<, :<=, :<=>, :==, :===, :=~, :>, :>=, :__id__, :__send__, :alias_method, :allocate, :ancestors, :attr, :attr_accessor, :attr_reader, :attr_writer, :autoload, :autoload?, :class, :class_eval, :class_exec, :class_variable_defined?, :class_variable_get, :class_variable_set, :class_variables, :clone, :const_defined?, :const_get, :const_missing, :const_set, :const_source_location, :constants, :define_method, :define_singleton_method, :deprecate_constant, :display, :dup, :enum_for, :eql?, :equal?, :extend, :freeze, :frozen?, :hash, :include, :include?, :included_modules, :inspect, :instance_eval, :instance_exec, :instance_method, :instance_methods, :instance_of?, :instance_variable_defined?, :instance_variable_get, :instance_variable_set, :instance_variables, :is_a?, :itself, :kind_of?, :method, :method_defined?, :methods, :module_eval, :module_exec, :name, :new, :nil?, :object_id, :prepend, :private_class_method, :private_constant, :private_instance_methods, :private_method_defined?, :private_methods, :protected_instance_methods, :protected_method_defined?, :protected_methods, :public_class_method, :public_constant, :public_instance_method, :public_instance_methods, :public_method, :public_method_defined?, :public_methods, :public_send, :remove_class_variable, :remove_instance_variable, :remove_method, :respond_to?, :send, :singleton_class, :singleton_class?, :singleton_method, :singleton_methods, :subclasses, :superclass, :taint, :tainted?, :tap, :then, :to_enum, :to_s, :trust, :undef_method, :untaint, :untrust, :untrusted?, :yield_self]
[:!, :!=, :!~, :<, :<=, :<=>, :==, :===, :=~, :>, :>=, :__id__, :__send__, :alias_method, :allocate, :ancestors, :attr, :attr_accessor, :attr_reader, :attr_writer, :autoload, :autoload?, :class, :class_eval, :class_exec, :class_variable_defined?, :class_variable_get, :class_variable_set, :class_variables, :clone, :const_defined?, :const_get, :const_missing, :const_set, :const_source_location, :constants, :define_method, :define_singleton_method, :deprecate_constant, :display, :dup, :enum_for, :eql?, :equal?, :extend, :freeze, :frozen?, :hash, :include, :include?, :included_modules, :inspect, :instance_eval, :instance_exec, :instance_method, :instance_methods, :instance_of?, :instance_variable_defined?, :instance_variable_get, :instance_variable_set, :instance_variables, :is_a?, :itself, :kind_of?, :method, :method_defined?, :methods, :module_eval, :module_exec, :name, :nil?, :object_id, :prepend, :private_class_method, :private_constant, :private_instance_methods, :private_method_defined?, :private_methods, :protected_instance_methods, :protected_method_defined?, :protected_methods, :public_class_method, :public_constant, :public_instance_method, :public_instance_methods, :public_method, :public_method_defined?, :public_methods, :public_send, :remove_class_variable, :remove_instance_variable, :remove_method, :respond_to?, :send, :singleton_class, :singleton_class?, :singleton_method, :singleton_methods, :sqrt, :subclasses, :superclass, :taint, :tainted?, :tap, :then, :to_enum, :to_s, :trust, :try_convert, :undef_method, :untaint, :untrust, :untrusted?, :yield_self]
[:!, :!=, :!~, :<, :<=, :<=>, :==, :===, :=~, :>, :>=, :__id__, :__send__, :alias_method, :allocate, :ancestors, :attr, :attr_accessor, :attr_reader, :attr_writer, :autoload, :autoload?, :class, :class_eval, :class_exec, :class_variable_defined?, :class_variable_get, :class_variable_set, :class_variables, :clone, :const_defined?, :const_get, :const_missing, :const_set, :const_source_location, :constants, :define_method, :define_singleton_method, :deprecate_constant, :display, :dup, :enum_for, :eql?, :equal?, :extend, :freeze, :frozen?, :hash, :include, :include?, :included_modules, :inspect, :instance_eval, :instance_exec, :instance_method, :instance_methods, :instance_of?, :instance_variable_defined?, :instance_variable_get, :instance_variable_set, :instance_variables, :is_a?, :itself, :kind_of?, :method, :method_defined?, :methods, :module_eval, :module_exec, :name, :nil?, :object_id, :prepend, :private_class_method, :private_constant, :private_instance_methods, :private_method_defined?, :private_methods, :protected_instance_methods, :protected_method_defined?, :protected_methods, :public_class_method, :public_constant, :public_instance_method, :public_instance_methods, :public_method, :public_method_defined?, :public_methods, :public_send, :remove_class_variable, :remove_instance_variable, :remove_method, :respond_to?, :send, :singleton_class, :singleton_class?, :singleton_method, :singleton_methods, :subclasses, :superclass, :taint, :tainted?, :tap, :then, :to_enum, :to_s, :trust, :undef_method, :untaint, :untrust, :untrusted?, :yield_self]
[:!, :!=, :!~, :<, :<=, :<=>, :==, :===, :=~, :>, :>=, :[], :__id__, :__send__, :alias_method, :allocate, :ancestors, :attr, :attr_accessor, :attr_reader, :attr_writer, :autoload, :autoload?, :class, :class_eval, :class_exec, :class_variable_defined?, :class_variable_get, :class_variable_set, :class_variables, :clone, :const_defined?, :const_get, :const_missing, :const_set, :const_source_location, :constants, :define_method, :define_singleton_method, :deprecate_constant, :display, :dup, :enum_for, :eql?, :equal?, :extend, :freeze, :frozen?, :hash, :include, :include?, :included_modules, :inspect, :instance_eval, :instance_exec, :instance_method, :instance_methods, :instance_of?, :instance_variable_defined?, :instance_variable_get, :instance_variable_set, :instance_variables, :is_a?, :itself, :kind_of?, :method, :method_defined?, :methods, :module_eval, :module_exec, :name, :new, :nil?, :object_id, :prepend, :private_class_method, :private_constant, :private_instance_methods, :private_method_defined?, :private_methods, :protected_instance_methods, :protected_method_defined?, :protected_methods, :public_class_method, :public_constant, :public_instance_method, :public_instance_methods, :public_method, :public_method_defined?, :public_methods, :public_send, :remove_class_variable, :remove_instance_variable, :remove_method, :respond_to?, :send, :singleton_class, :singleton_class?, :singleton_method, :singleton_methods, :subclasses, :superclass, :taint, :tainted?, :tap, :then, :to_enum, :to_s, :trust, :try_convert, :undef_method, :untaint, :untrust, :untrusted?, :yield_self]
[:!, :!=, :!~, :<, :<=, :<=>, :==, :===, :=~, :>, :>=, :__id__, :__send__, :alias_method, :allocate, :ancestors, :attr, :attr_accessor, :attr_reader, :attr_writer, :autoload, :autoload?, :class, :class_eval, :class_exec, :class_variable_defined?, :class_variable_get, :class_variable_set, :class_variables, :clone, :const_defined?, :const_get, :const_missing, :const_set, :const_source_location, :constants, :define_method, :define_singleton_method, :deprecate_constant, :display, :dup, :enum_for, :eql?, :equal?, :extend, :freeze, :frozen?, :hash, :include, :include?, :included_modules, :inspect, :instance_eval, :instance_exec, :instance_method, :instance_methods, :instance_of?, :instance_variable_defined?, :instance_variable_get, :instance_variable_set, :instance_variables, :is_a?, :itself, :kind_of?, :method, :method_defined?, :methods, :module_eval, :module_exec, :name, :new, :nil?, :object_id, :prepend, :private_class_method, :private_constant, :private_instance_methods, :private_method_defined?, :private_methods, :protected_instance_methods, :protected_method_defined?, :protected_methods, :public_class_method, :public_constant, :public_instance_method, :public_instance_methods, :public_method, :public_method_defined?, :public_methods, :public_send, :remove_class_variable, :remove_instance_variable, :remove_method, :respond_to?, :send, :singleton_class, :singleton_class?, :singleton_method, :singleton_methods, :subclasses, :superclass, :taint, :tainted?, :tap, :then, :to_enum, :to_s, :trust, :undef_method, :untaint, :untrust, :untrusted?, :yield_self]
</syntaxhighlight>
;Crystalに実装したmethodsマクロ:<syntaxhighlight lang=crystal>
class Object
macro methods
{{ @type.methods.map(&.name.stringify).sort.uniq }}
end
end
p! Object.methods,
Reference.methods,
Array.methods,
Box.methods,
Channel.methods,
Deque.methods,
Dir.methods,
Exception.methods,
ArgumentError.methods,
DivisionByZeroError.methods,
IndexError.methods,
InvalidByteSequenceError.methods,
Fiber.methods,
Hash.methods,
IO.methods,
File.methods,
Mutex.methods,
PrettyPrint.methods,
Process.methods,
Regex.methods,
String.methods,
Thread.methods,
Bool.methods,
Int32.methods,
Float64.methods,
Proc.methods
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Object.methods # => ["!=", "!~", "==", "===", "=~", "class", "crystal_type_id", "dup", "hash", "in?", "inspect", "itself", "not_nil!", "pretty_inspect", "pretty_print", "tap", "to_s", "try", "unsafe_as"]
Reference.methods # => ["==", "dup", "exec_recursive", "exec_recursive_clone", "hash", "inspect", "object_id", "pretty_print", "same?", "to_s"]
Array.methods # => ["&", "*", "+", "-", "<<", "<=>", "==", "[]", "[]=", "[]?", "calculate_new_capacity", "check_needs_resize", "check_needs_resize_for_unshift", "clear", "clone", "compact", "compact!", "concat", "delete", "delete_at", "dup", "each_repeated_permutation", "fill", "first", "flatten", "increase_capacity", "increase_capacity_for_unshift", "index", "initialize", "insert", "inspect", "internal_delete", "last", "map", "map_with_index", "needs_resize?", "pop", "pop?", "pretty_print", "product", "push", "reject!", "remaining_capacity", "repeated_permutations", "replace", "reset_buffer_to_root_buffer", "resize_if_cant_insert", "resize_to_capacity", "resize_to_capacity_for_unshift", "reverse", "root_buffer", "rotate", "rotate!", "select!", "shift", "shift?", "shift_buffer_by", "shift_when_not_empty", "shuffle", "size", "size=", "skip", "sort", "sort!", "sort_by", "sort_by!", "to_a", "to_lookup_hash", "to_s", "to_unsafe", "to_unsafe_slice", "transpose", "truncate", "uniq", "uniq!", "unsafe_fetch", "unsafe_put", "unshift", "unstable_sort", "unstable_sort!", "unstable_sort_by", "unstable_sort_by!", "|"]
Box.methods # => ["initialize", "object"]
Channel.methods # => ["close", "closed?", "dequeue_receiver", "dequeue_sender", "initialize", "inspect", "pretty_print", "receive", "receive?", "receive_impl", "receive_internal", "receive_select_action", "receive_select_action?", "send", "send_internal", "send_select_action"]
Deque.methods # => ["+", "<<", "==", "buffer", "clear", "clone", "concat", "delete", "delete_at", "dup", "each", "halfs", "increase_capacity", "initialize", "insert", "inspect", "internal_delete", "pop", "pop?", "pretty_print", "push", "reject!", "rotate!", "select!", "shift", "shift?", "size", "size=", "to_s", "unsafe_fetch", "unsafe_put", "unshift"]
Dir.methods # => ["children", "close", "each", "each_child", "entries", "initialize", "inspect", "path", "pretty_print", "read", "rewind", "to_s"]
Exception.methods # => ["backtrace", "backtrace?", "callstack", "callstack=", "cause", "initialize", "inspect", "inspect_with_backtrace", "message", "to_s"]
ArgumentError.methods # => ["initialize"]
DivisionByZeroError.methods # => ["initialize"]
IndexError.methods # => ["initialize"]
InvalidByteSequenceError.methods # => ["initialize"]
Fiber.methods # => ["cancel_timeout", "dead?", "enqueue", "initialize", "inspect", "makecontext", "name", "name=", "next", "next=", "previous", "previous=", "push_gc_roots", "resumable?", "resume", "resume_event", "run", "running?", "stack_bottom", "stack_bottom=", "timeout", "timeout_event", "timeout_select_action", "timeout_select_action=", "to_s"]
Hash.methods # => ["==", "[]", "[]=", "[]?", "add_entry_and_increment_size", "clear", "clear_entries", "clear_impl", "clear_indices", "clone", "compact", "compact!", "compare_by_identity", "compare_by_identity?", "compute_indices_bytesize", "delete", "delete_entry", "delete_entry_and_update_counts", "delete_impl", "delete_linear_scan", "dig", "dig?", "do_compaction", "double_indices_size", "dup", "each", "each_entry_with_index", "each_key", "each_value", "empty?", "entries", "entries_capacity", "entries_full?", "entries_size", "entry_matches?", "fetch", "find_entry", "find_entry_with_index", "find_entry_with_index_linear_scan", "first_entry?", "first_key", "first_key?", "first_value", "first_value?", "fit_in_indices", "get_entry", "get_index", "has_key?", "has_value?", "hash", "indices_malloc_size", "indices_size", "initialize", "initialize_clone", "initialize_clone_entries", "initialize_compare_by_identity", "initialize_copy_non_entries_vars", "initialize_default_block", "initialize_dup", "initialize_dup_entries", "inspect", "invert", "key_for", "key_for?", "key_hash", "keys", "last_entry?", "last_key", "last_key?", "last_value", "last_value?", "malloc_entries", "malloc_indices", "merge", "merge!", "merge_into!", "next_index", "pretty_print", "proper_subset_of?", "proper_superset_of?", "put", "realloc_entries", "realloc_indices", "rehash", "reject", "reject!", "resize", "select", "select!", "set_entry", "set_index", "shift", "shift?", "size", "subset_of?", "superset_of?", "to_a", "to_a_impl", "to_h", "to_s", "transform_keys", "transform_values", "transform_values!", "update", "update_linear_scan", "upsert", "values", "values_at"]
IO.methods # => ["<<", "check_open", "close", "closed?", "decoder", "each_byte", "each_char", "each_line", "encoder", "encoding", "flush", "getb_to_end", "gets", "gets_peek", "gets_slow", "gets_to_end", "has_non_utf8_encoding?", "peek", "peek_or_read_utf8", "peek_or_read_utf8_masked", "pos", "pos=", "print", "printf", "puts", "read", "read_at", "read_byte", "read_bytes", "read_char", "read_char_with_bytesize", "read_fully", "read_fully?", "read_line", "read_string", "read_utf8", "read_utf8_byte", "rewind", "seek", "set_encoding", "skip", "skip_to_end", "tell", "tty?", "utf8_encoding?", "write", "write_byte", "write_bytes", "write_string", "write_utf8"]
File.methods # => ["delete", "initialize", "inspect", "path", "read_at", "size", "truncate"]
Mutex.methods # => ["initialize", "lock", "lock_slow", "synchronize", "try_lock", "unlock"]
PrettyPrint.methods # => ["break_outmost_groups", "breakable", "comma", "current_group", "fill_breakable", "flush", "group", "group_queue", "group_sub", "indent", "initialize", "list", "nest", "newline", "surround", "text"]
Process.methods # => ["channel", "close", "close_io", "copy_io", "ensure_channel", "error", "error?", "exists?", "finalize", "initialize", "input", "input?", "output", "output?", "pid", "signal", "stdio_to_fd", "terminate", "terminated?", "wait"]
Regex.methods # => ["+", "==", "===", "=~", "capture_count", "clone", "dup", "finalize", "hash", "initialize", "inspect", "internal_matches?", "match", "match_at_byte_index", "matches?", "matches_at_byte_index?", "name_table", "options", "source", "to_s"]
String.methods # => ["%", "*", "+", "<=>", "==", "=~", "[]", "[]?", "ascii_only?", "blank?", "byte_at", "byte_at?", "byte_delete_at", "byte_index", "byte_index_to_char_index", "byte_slice", "byte_slice?", "bytes", "bytesize", "calc_excess_left", "calc_excess_right", "camelcase", "capitalize", "center", "char_at", "char_bytesize_at", "char_index_to_byte_index", "chars", "check_no_null_byte", "chomp", "clone", "codepoint_at", "codepoints", "compare", "count", "delete", "delete_at", "downcase", "dump", "dump_char", "dump_hex", "dump_or_inspect", "dump_or_inspect_char", "dump_or_inspect_unquoted", "dump_unquoted", "dup", "each_byte", "each_byte_index_and_char_index", "each_char", "each_char_with_index", "each_codepoint", "each_grapheme", "each_grapheme_boundary", "each_line", "empty?", "encode", "ends_with?", "find_start_and_end", "grapheme_size", "graphemes", "gsub", "gsub_append", "gsub_ascii_char", "has_back_references?", "hash", "hexbytes", "hexbytes?", "includes?", "index", "insert", "insert_impl", "inspect", "inspect_char", "inspect_unquoted", "just", "lchop", "lchop?", "lines", "ljust", "lstrip", "match", "matches?", "partition", "presence", "pretty_print", "rchop", "rchop?", "remove_excess", "remove_excess_left", "remove_excess_right", "reverse", "rindex", "rjust", "rpartition", "rstrip", "scan", "scan_backreferences", "scrub", "single_byte_optimizable?", "size", "size_known?", "split", "split_by_empty_separator", "split_single_byte", "squeeze", "starts_with?", "strip", "sub", "sub_append", "sub_index", "sub_range", "succ", "titleize", "to_f", "to_f32", "to_f32?", "to_f64", "to_f64?", "to_f?", "to_f_impl", "to_i", "to_i128", "to_i128?", "to_i16", "to_i16?", "to_i32", "to_i32?", "to_i64", "to_i64?", "to_i8", "to_i8?", "to_i?", "to_s", "to_slice", "to_u128", "to_u128?", "to_u16", "to_u16?", "to_u32", "to_u32?", "to_u64", "to_u64?", "to_u8", "to_u8?", "to_unsafe", "to_unsigned_info", "to_utf16", "tr", "underscore", "unicode_delete_at", "unsafe_byte_at", "unsafe_byte_slice", "unsafe_byte_slice_string", "upcase", "valid_encoding?"]
Thread.methods # => ["detach", "event_base", "gc_thread_handler", "gc_thread_handler=", "initialize", "join", "main_fiber", "next", "next=", "previous", "previous=", "scheduler", "stack_address", "start", "to_unsafe"]
Bool.methods # => ["!=", "&", "==", "^", "clone", "hash", "to_s", "to_unsafe", "|"]
Int32.methods # => ["!=", "&", "&*", "&+", "&-", "*", "+", "-", "/", "<", "<=", "==", ">", ">=", "^", "clone", "leading_zeros_count", "popcount", "to_f", "to_f!", "to_f32", "to_f32!", "to_f64", "to_f64!", "to_i", "to_i!", "to_i128", "to_i128!", "to_i16", "to_i16!", "to_i32", "to_i32!", "to_i64", "to_i64!", "to_i8", "to_i8!", "to_u", "to_u!", "to_u128", "to_u128!", "to_u16", "to_u16!", "to_u32", "to_u32!", "to_u64", "to_u64!", "to_u8", "to_u8!", "trailing_zeros_count", "unsafe_chr", "unsafe_div", "unsafe_mod", "unsafe_shl", "unsafe_shr", "|"]
Float64.methods # => ["!=", "*", "**", "+", "-", "/", "<", "<=", "==", ">", ">=", "ceil", "clone", "fdiv", "floor", "next_float", "prev_float", "round_away", "round_even", "to_f", "to_f!", "to_f32", "to_f32!", "to_f64", "to_f64!", "to_i", "to_i!", "to_i128", "to_i128!", "to_i16", "to_i16!", "to_i32", "to_i32!", "to_i64", "to_i64!", "to_i8", "to_i8!", "to_s", "to_u", "to_u!", "to_u128", "to_u128!", "to_u16", "to_u16!", "to_u32", "to_u32!", "to_u64", "to_u64!", "to_u8", "to_u8!", "trunc"]
Proc.methods # => ["==", "===", "arity", "call", "clone", "closure?", "closure_data", "hash", "internal_representation", "partial", "pointer", "to_s"]</syntaxhighlight>
== 脚註 ==
<references />
== 外部リンク ==
* [https://crystal-lang.org/ The Crystal Programming Language] {{---}} 公式サイト
** [https://crystal-lang.org/api/1.5.0/ Crystal 1.5.0 リファレンス]
** [https://play.crystal-lang.org/#/cr Compile & run code in Crystal] {{---}} playground
[[Category:Crystal|*]]
[[Category:プログラミング言語]]
{{NDC|007.64}}
48jq9dnw1yasoodi91o6mym3wlg8y1j
205712
205703
2022-07-23T00:26:06Z
Ef3
694
/* Hello,_World! */ Rubyとの比較も兼ねて、[[Ruby#Hello, World!|Ruby#Hello, World!]]をそのまま実行してみます。
wikitext
text/x-wiki
{{Pathnav|メインページ|工学|情報技術|プログラミング|frame=1}}
{{Wikipedia|Crystal (プログラミング言語)}}
本書は、[[w:Crystal (プログラミング言語)|Crystal]]のチュートリアルです。
'''Crystal'''は、Ary Borenszweig、Juan Wajnerman、Brian Cardiffと300人以上の貢献者によって設計・開発された[汎用オブジェクト指向プログラミング言語です<ref>{{Cite web
|url=https://github.com/crystal-lang/crystal/graphs/contributors
|title=Contributors
|accessdate=2022-07-18
|website=github.com
}}</ref>。[[Ruby]] にヒントを得た構文を持ち、静的型チェックを備えた [[コンパイル型言語]]ですが、変数やメソッドの引数の型は一般には不要です。型は高度なグローバル[[型推論]]アルゴリズムによって解決される。<ref>{{Cite web
|url=http://crystal-lang.org/2013/09/23/type-inference-part-1.html
|title=Type inference part 1
|last=Brian J.
|first=Cardiff
|date=2013-09-09
|accessdate=2022-07-18
|website=crystal-lang.org
}}</ref>Crystalは[[Apache License]]バージョン2.0のもと、FOSSとしてリリースされています。
__TOC__
== Hello, World! ==
他の多くのチュートリアルがそうであるように、
私たちもまずはCrystalの世界にあいさつすることから始めましょう。
Rubyとの比較も兼ねて、[[Ruby#Hello, World!]]をそのまま実行してみます。
''hello.cr''というファイルを作り、次のように書いて保存して下さい<ref>Crystalのソースファイルの拡張子は''.cr'' です</ref>。
;hello.cr:<syntaxhighlight lang=Crystal>
puts 'Hello, World!'
</syntaxhighlight>
;コマンドラインでの操作:<syntaxhighlight lang="console">
% cat hello.cr
puts 'Hello, World!'
% crystal hello.cr
In hello.cr:1:6
1 | puts 'Hello, World!'
^
Error: unterminated char literal, use double quotes for strings
% sed -i -e "s@'@Q@g" -e 's@Q@"@g' hello.cr
% cat hello.cr
puts "Hello, World!"
% crystal hello.cr
Hello, World!
</syntaxhighlight>
この1行のスクリプトは、メソッド<code>puts</code> に文字リテラル<code>"Hello, World!"</code>を渡し呼出しています。
このプログラムは、[[Ruby#Hello, World!]]と同じですが、Crystalでは文字列リテラルは <code>"…"</code> で囲うのでそれだけ変更しました。
[TODO: コマンドラインツール crystal の解説。 crystal ファイル名 は crystal run ファイル名 の短縮形で、インタープリタ的な実行…ではなく、内部ビルドツールでコンパイル・実行を行う]
== Ruby との違い ==
Crystalは、Rubyに触発された構文を持つものの、Rubyとの互換性をゴールに定めては'''いません'''。
このため、細部を見ると仕様に差異があり、Rubyのソースコードをcrystalに掛けるても前節の 'Hello World' の様にコンパイルに失敗することがあります。
また、コンパイルできても実行結果に違いが出ることがあります。
ここでは、Ruby との違いについて実際のコードと双方の結果を比較することで、差異についての理解を深めていきます。
=== 整数型の特性 ===
;大きな整数:<syntaxhighlight lang=Crystal>
p 2 ** 999
p (2 ** 999).class
</syntaxhighlight>
;rubyの実行結果:<syntaxhighlight lang="console">
5357543035931336604742125245300009052807024058527668037218751941851755255624680612465991894078479290637973364587765734125935726428461570217992288787349287401967283887412115492710537302531185570938977091076523237491790970633699383779582771973038531457285598238843271083830214915826312193418602834034688
Integer
</syntaxhighlight>
;crystalの実行結果:<syntaxhighlight lang="console">
Unhandled exception: Arithmetic overflow (OverflowError)
from /usr/local/share/crystal/share/crystal/src/int.cr:295:9 in '**'
from pow.cr:1:1 in '__crystal_main'
from /usr/local/share/crystal/share/crystal/src/crystal/main.cr:115:5 in 'main_user_code'
from /usr/local/share/crystal/share/crystal/src/crystal/main.cr:101:7 in 'main'
from /usr/local/share/crystal/share/crystal/src/crystal/main.cr:127:3 in 'main'
from /usr/local/lib64/libc.so.6 in '__libc_start_main'
from /usr/local/.cache/crystal/crystal-run-pow.tmp in '_start'
from ???
</syntaxhighlight>
: Ruby の整数は、桁あふれが起こると自動的に多倍長整数に型変換されるので、継ぎ目なしに大きな数を扱うアルゴルズムが使えます。
: Crystal の整数は、固定長です(大きさについては[[#リテラルと型|後述]])。なので大きな答えになる式を評価すると桁あふれが生じます。桁あふれが生じますが、C言語のように寡黙に処理を続けるのではなく、実行時に例外(OverflowError)が上がるので、例外を捕捉し然るべき処置を施すことが可能です。
==== BigInt ====
<code>big</code> を <code>require</code> すると <code>BigInt</code> が使えるようになります。
;BigInt:<syntaxhighlight lang=Crystal>
require "big"
p BigInt.new(2) ** 999
p (BigInt.new(2) ** 999).class
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="console">
5357543035931336604742125245300009052807024058527668037218751941851755255624680612465991894078479290637973364587765734125935726428461570217992288787349287401967283887412115492710537302531185570938977091076523237491790970633699383779582771973038531457285598238843271083830214915826312193418602834034688
BigInt
</syntaxhighlight>
: BigIntはプリミティブではなので、リテラル表現はありません。また、
::<syntaxhighlight lang=Crystal>
n : BigInt = 2
</syntaxhighlight>
::<syntaxhighlight lang=console>
Error: type must be BigInt, not Int32
</syntaxhighlight>
:: のように型アノテーションすることも出来ません。
=== リテラルと型 ===
;様々なリテラルと型:<syntaxhighlight lang=Crystal>
[nil, false, true, 42, 2.73, 'Q', "string", [1,2,3], {a:1, b:2}].each{|x|
p [x, x.class]
}
</syntaxhighlight>
;rubyの実行結果:<syntaxhighlight lang="console">
[nil, NilClass]
[false, FalseClass]
[true, TrueClass]
[42, Integer]
[2.73, Float]
["Q", String]
["string", String]
[[1, 2, 3], Array]
[{:a=>1, :b=>2}, Hash]
</syntaxhighlight>
;crystalの実行結果:<syntaxhighlight lang="console">
[nil, Nil]
[false, Bool]
[true, Bool]
[42, Int32]
[2.73, Float64]
['Q', Char]
["string", String]
[[1, 2, 3], Array(Int32)]
[{a: 1, b: 2}, NamedTuple(a: Int32, b: Int32)]
</syntaxhighlight>
: Crystal の整数は Int32、浮動小数点数は Float64 です。
;サイズを指定した数リテラル:<syntaxhighlight lang=Crystal>
[1_i64, 2_u32, 3_u64, 4_i32, 5_i16, 6_u8, 7_i128, 8_u128, 3.14_f32, 1.44_f64].each{|x|
p [x, x.class]
}
</syntaxhighlight>
;ruby:Rubyでは、サーフィックスの付いた数値リテラルは無効
;crystalの実行結果:<syntaxhighlight lang="console">
[1, Int64]
[2, UInt32]
[3, UInt64]
[4, Int32]
[5, Int16]
[6, UInt8]
[7, Int128]
[8, UInt128]
[3.14, Float32]
[1.44, Float64]
</syntaxhighlight>
: Crystal では、数値リテラルに _ で始まるサーフィックスを付け { i:符号付き整数, u:符号なし整数, f:浮動小数点数 } と { 8,16,32,64,128 } のビット幅の組合せです<ref>[https://crystal-lang.org/reference/1.5/syntax_and_semantics/literals/ Literals]</ref>。
=== for式がない ===
Crystal には、Ruby にはある for式がありません。
;Rubyのfor式の構文:<syntaxhighlight lang="ruby">
for 変数 in コレクション
文
end
</syntaxhighlight>
:コレクションは Range, Array, Hash など内部構造を持つオブジェクトです。
:for式は、最後に評価した値を返すので、for'''式'''です。
;for式のeachメソッドによる置換え:<syntaxhighlight lang="ruby">
for x in [ 2, 3, 5, 7, 11 ] do
p x
end
# ↓
[ 2, 3, 5, 7, 11 ].each do | x |
p x
end
</syntaxhighlight>
: の様にコレクションの each メソッドで置換え可能なので、Rubyからの移植でも小規模な書換えで済みます<ref>[https://github.com/crystal-lang/crystal/issues/830 "For" Loop support #830]</ref>(後述のマクロで実装できないかと思いましたが、いまのところ無理のようです)。
また loop 式もありませんが while true; … end で間に合います。Ruby では while 式の条件の次に do が置けますが、Crystal では置けません。
=== eval()がない ===
Crystal には eval() はありません。
Crystalはコンパイル型言語ですので、無理もないことです。
もし、Crystal で eval() を実装しようとすると、Common Lisp の様にインタープリターを丸ごとランタイムに含む必要があります。
これはリーズナブルな選択ではありません。
Crystal では、eval() が必要なケースに(限定的ですが)マクロを使うことが出来る可能性があります。
=== マクロ ===
Crystalには、Rubyにはないマクロがあります<ref>[https://crystal-lang.org/reference/1.5/syntax_and_semantics/macros/ Macros - Crystal]</ref>。Rubyは実行時にすべてのオブジェクトにアクセス出来て、メソッド生やし放題なのでマクロは必要ありませんが、Crystalはコンパイル時に型やメソッドを確定する必要があり、特にメソッドジェネレターとしてのマクロにニーズがあります。また、テンプレート言語的なマクロなので、環境変数による条件分岐や、コンテナを渡し繰返し処理する構文もあります(面白いことにマクロには for 文があり、反対にマクロの中では、eachメソッドは使えません)。マクロには <code><nowiki>{{</nowiki>attr.id}}</code> の様にASTへのアクセス手順が用意されており、半ば言語を拡張するようなアプローチを取ることも出来ます。
[TODO:ASTについての解説;コラム向き?]
;マクロを使ったattr_accessorのイミュレーション:<syntaxhighlight lang=crystal>
class Point
def initialize(@x : Int32, @y : Int32)
end
# macro定義
macro attr_accessor(*attrs)
{% for attr in attrs %}
def {{attr.id}}() @{{attr.id}} end
def {{attr.id}}=(var) @{{attr.id}} = var end
{% end %}
end
# macro呼出し
attr_accessor :x, :y
end
pt = Point.new(20, 30)
p [pt.x, pt.y]
t = pt.x
pt.x = pt.y
pt.y = t
p [pt.x, pt.y]
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
[20, 30]
[30, 20]
</syntaxhighlight>
: Ruby には、attr_accessor と言う「クラスのメンバーのアクセサーを自動生成するメソッド」がありますが、Crystalにはないようなので、マクロで実装しました。
:: attr_accessor :name からは
::<syntaxhighlight lang=ruby>
def name() @name end
def name=(val) @name = val end
</syntaxhighlight>相当のコードが生成されます。
[TODO:マクロの機能と構文の説明 *の付いた引数、 <nowiki>{{</nowiki>引数}}、{% … %} 構文]
==== マクロ p! ====
メソッド p は、与えられた「式」の inspaect() の返す値を puts しますが、マクロ p! は、それに先んじて(評価前の)「式」を表示します<ref>[https://crystal-lang.org/api/1.5.0/Crystal/Macros.html#p%21%28%2Aexpressions%29%3ANop-instance-method def p!(*expressions) : Nop]</ref>。
;p!の例:<syntaxhighlight lang=crystal>
x, y = true, false
p! x,y,x && y, x || y, x ^ y, !x, x != y, x == y
ary = [ 1, 2, 3 ]
p! ary
p! ary.map(&. << 1)
p! ary.map(&.to_f)
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
x # => true
y # => false
x && y # => false
x || y # => true
x ^ y # => true
!x # => false
x != y # => true
x == y # => false
ary # => [1, 2, 3]
ary.map(&.<<(1)) # => [2, 4, 6]
ary.map(&.to_f) # => [1.0, 2.0, 3.0]
</syntaxhighlight>
===== 入れ子のp! =====
マクロ p! は入れ子に出来ます。また、一旦ASTに変換してから再度ソースコードに変換するので、等価な別の構文に変換されることがあります。
;入れ子のp!:<syntaxhighlight lang=crystal>
p! (
100.times{|i|
p! i
break i if i > 12
}
)
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
(100.times do |i|
p!(i)
if i > 12
break i
end
end) # => i
# => 0
i # => 1
i # => 2
i # => 3
i # => 4
i # => 5
i # => 6
i # => 7
i # => 8
i # => 9
i # => 10
i # => 11
i # => 12
i # => 13
13
</syntaxhighlight>
=== クラス ===
==== シンプルなクラス ====
;シンプルなクラス:<syntaxhighlight lang=crystal highlight="2" line>
class Hello
def initialize(@name : String = "World")
end
def greeting
puts "Hello #{@name}!"
end
end
hello = Hello.new()
hello.greeting
universe = Hello.new("Universe")
universe.greeting
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
Hello World!
Hello Universe!
</syntaxhighlight>
:;初期化メソッド
:: <syntaxhighlight lang=crystal line start=4>
def initialize(@name : String = "World")
end
</syntaxhighlight>
::Rubyであれば
:: <syntaxhighlight lang=ruby line start=4>
def initialize(name = "World")
@name = name
end
</syntaxhighlight>
::とするところですが、Crystalでは、型アノテーション <code> : String</code> を使い、引数の型を限定しました。
::また、(@ 付きの)アトリビュート名を仮引数にすると、そのままアトリビュート(a.k.a. インスタンス変数)に仮引数が代入されます。
::これは、C++のコンストラクターのメンバー初期化リストと同じアイディアですが、Crystalではインスタンス変数に @ が前置されるので、仮引数に @ が出現すればインスタンス変数の初期値だと自明で、聡明な選択です。
==== 都市間の大圏距離 ====
[[Ruby#ユーザー定義クラス]]の都市間の大圏距離を求めるメソッドを追加した例を、Crystalに移植しました。
;都市間の大圏距離:<syntaxhighlight lang=crystal highlight=”2,7,12” line>
class GeoCoord
getter :longitude, :latitude
def initialize(@longitude : Float64, @latitude : Float64)
end
def to_s(io)
ew, ns = "東経", "北緯"
long, lat = @longitude, @latitude
ew, long = "西経", -long if long < 0.0
ns, lat = "南緯", -lat if lat < 0.0
io << "(#{ew}: #{long}, #{ns}: #{lat})"
end # https://github.com/crystal-lang/crystal/issues/259
def distance(other)
i, r = Math::PI / 180, 6371.008
Math.acos(Math.sin(@latitude*i) * Math.sin(other.latitude * i) +
Math.cos(@latitude*i) * Math.cos(other.latitude * i) * Math.cos(@longitude * i - other.longitude * i)) * r
end
end
# メソッドの先頭を大文字に出来ないのでクラス名のメソッドは作ることが出来ない
# def GeoCoord(lng : Float64, lat : Float64)
# GeoCoord.new(lng, lat)
# end
Sites = {
"東京駅": GeoCoord.new(139.7673068, 35.6809591),
"シドニー・オペラハウス": GeoCoord.new(151.215278, -33.856778),
"グリニッジ天文台": GeoCoord.new(-0.0014, 51.4778),
}
Sites.each { |name, gc|
puts "#{name}: #{gc}"
}
puts ""
keys, len = Sites.keys, Sites.size
keys.each_with_index { |x, i|
y = keys[(i + 1) % len]
puts "#{x} ⇔ #{y}: #{Sites[x].distance(Sites[y])} [km]"
}
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
東京駅: (東経: 139.7673068, 北緯: 35.6809591)
シドニー・オペラハウス: (東経: 151.215278, 南緯: 33.856778)
グリニッジ天文台: (西経: 0.0014, 北緯: 51.4778)
東京駅 ⇔ シドニー・オペラハウス: 7823.269299386704 [km]
シドニー・オペラハウス ⇔ グリニッジ天文台: 16987.2708377249 [km]
グリニッジ天文台 ⇔ 東京駅: 9560.546566490015 [km]
</syntaxhighlight>
:Crystal には、<syntaxhighlight lang=ruby inline> attr_accessor </syntaxhighlight> はありませんが、標準ライブラリーのマクロに <syntaxhighlight lang=crystal inline> getter </syntaxhighlight>があるので
:: <syntaxhighlight lang=crystal line start=2>
getter :longitude, :latitude
</syntaxhighlight>
::としました。
::将来、<syntaxhighlight lang=ruby inline> attr_accessor </syntaxhighlight> が実装される可能性はありますが、姉妹品の<syntaxhighlight lang=crystal inline> setter </syntaxhighlight> との併用が下位互換性を考えると確実です。
: to_s は、Ruby ならば
:: <syntaxhighlight lang=ruby line start=7>
def to_s()
</syntaxhighlight>
:: <syntaxhighlight lang=ruby line start=12>
"(#{ew}: #{long}, #{ns}: #{lat})"
</syntaxhighlight>
:: ですが、Crystalでは追加の引数 <var>io</var> が必要で
:: <syntaxhighlight lang=ruby line start=7>
def to_s(io)
</syntaxhighlight>
:: <syntaxhighlight lang=ruby line start=12>
io << "(#{ew}: #{long}, #{ns}: #{lat})"
</syntaxhighlight>
: Ruby にはクラス名と同じ名前のメソッドで .new を呼出す文化があるのですが、Crystalはメソッドの先頭を大文字に出来ないので、これは見送りました。
==== 包含と継承 ====
[[JavaScript/クラス#包含と継承]]を、Rubyに移植した[[Ruby#包含と継承]]を、Crystalに移植しました。
;包含と継承の例:<syntaxhighlight lang=crystal line>
class Point
def initialize(@x = 0, @y = 0)
end
def inspect(io)
io << "x:#{@x}, y:#{@y}"
end
def move(dx = 0, dy = 0)
@x, @y = @x + dx, @y + dy
self
end
end
class Shape
def initialize(x = 0, y = 0)
@location = Point.new(x, y)
end
def inspect(io)
@location.inspect(io)
end
def move(x, y)
@location.move(x, y)
self
end
end
class Rectangle < Shape
def initialize(x = 0, y = 0, @width = 0, @height = 0)
super(x, y)
end
def inspect(io)
super(io)
io << ", width:#{@width}, height:#{@height}"
end
end
rct = Rectangle.new(12, 32, 100, 50)
p! rct,
rct.is_a?(Rectangle),
rct.is_a?(Shape),
rct.is_a?(Point),
rct.move(11, 21)
(END)</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
rct # => x:12, y:32, width:100, height:50
rct.is_a?(Rectangle) # => true
rct.is_a?(Shape) # => true
rct.is_a?(Point) # => false
rct.move(11, 21) # => x:23, y:53, width:100, height:50
</syntaxhighlight>
;crystal tool hierarchy:<syntaxhighlight lang=console>
% crystal tool hierarchy inclusion-and-inheritance.cr -e Shape
- class Object (4 bytes)
|
+- class Reference (4 bytes)
|
+- class Shape (16 bytes)
. @location : Point (8 bytes)
|
+- class Rectangle (24 bytes)
@width : Int32 (4 bytes)
@height : Int32 (4 bytes)
</syntaxhighlight>
: crystal の tool hierarchy サブコマンドで、クラスの継承関係がわかります。
==== 抽象クラス ====
[[Java/抽象クラス]]を、Crystalに移植しました。
;抽象クラスの宣言:<syntaxhighlight lang=Java>
abstract class クラス名
#
end
</syntaxhighlight>
: このクラス名は、 .new でインスタンス化出来ません。
:: Error: can't instantiate abstract class クラス名
: となります。
:インスタンス化することは出来ませんが、抽象クラスを別のクラスが継承する事は出来ます。
:また、抽象クラスを <code>super()</code> を使うことでメソッドを呼び出せるので、抽象メソッドではないメソッド(具象メソッド)を持つことも、インスタンス変数も持つことも出来ます。
:'''抽象クラスの例'''では、Shapeのinitializeメソッドが抽象クラスの具象メソッドとなっています。
;抽象メソッドの宣言:<syntaxhighlight lang=Java>
abstract def メソッド名
</syntaxhighlight>
: 派生先のクラスで、「メソッド名」を定義(def)し忘れると
:: Error: abstract `def クラス名#メソッド名()` must be implemented by クラス名
: となります
;抽象クラスの例:<syntaxhighlight lang=crystal line>
abstract class Shape
def initialize(@x = 0.0, @y = 0.0)
end
abstract def to_s(io)
abstract def area
end
class Square < Shape
def initialize(x, y, @wh = 0.0)
super(x, y)
end
def to_s(io)
io << "Square(#{@x}, #{@y}, #{@wh})"
end
def area
@wh * @wh
end
end
abstract class Shape
def initialize(@x = 0.0, @y = 0.0)
end
abstract def to_s(io)
abstract def area
end
class Square < Shape
def initialize(x, y, @wh = 0.0)
super(x, y)
end
def to_s(io)
io << "Square(#{@x}, #{@y}, #{@wh})"
end
def area
@wh * @wh
end
end
class Recrangle < Shape
def initialize(x, y, @w = 0.0, @h = 0.0)
super(x, y)
end
def to_s(io)
io << "Rectanle(#{@x}, #{@y}, #{@w}, #{@h})"
end
def area
@w * @h
end
end
class Circle < Shape
def initialize(x, y, @r = 0.0)
super(x, y)
end
def to_s(io)
io << "Circle(#{@x}, #{@y}, #{@r})"
end
def area
3.1425926536 * @r * @r
end
end
shapes = [
Square.new(5.0, 10.0, 15.0),
Recrangle.new(13.0, 23.0, 20.0, 10.0),
Circle.new(3.0, 2.0, 20.0),
] of Shape
shapes.each do |shape|
puts("#{shape}: #{shape.area}")
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
Square(5.0, 10.0, 15.0): 225.0
Rectanle(13.0, 23.0, 20.0, 10.0): 200.0
Circle(3.0, 2.0, 20.0): 1257.03706144
</syntaxhighlight>
;crystal tool hierarchy:<syntaxhighlight lang=console>
% crystal tool hierarchy abstract.cr -e Shape
- class Object (4 bytes)
|
+- class Reference (4 bytes)
|
+- class Shape (24 bytes)
. @x : Float64 (8 bytes)
. @y : Float64 (8 bytes)
|
+- class Circle (32 bytes)
| @r : Float64 (8 bytes)
|
+- class Recrangle (40 bytes)
| @w : Float64 (8 bytes)
| @h : Float64 (8 bytes)
|
+- class Square (32 bytes)
@wh : Float64 (8 bytes)
</syntaxhighlight>
: crystal の tool hierarchy サブコマンドで、クラスの継承関係がわかります。
: 「包含と継承の例」と比べると、ShapeとRectangleが同じ階層にあることがわかると思います。
[TODO:virtual class::いい例がない]
== キーワード ==
Crystalのキーワード( ''keywords'' ) は、以下の通り。
<code>abstract</code> <code>alias</code> <code>as</code> <code>asm</code> <code>begin</code> <code>break</code> <code>case</code> <code>class</code> <code>def</code> <code>do</code> <code>else</code> <code>elsif</code> <code>end</code> <code>ensure</code> <code>enum</code> <code>extend</code> <code>for</code> <code>fun</code> <code>if</code> <code>include</code> <code>instance_sizeof</code> <code>lib</code> <code>macro</code> <code>module</code> <code>next</code> <code>of</code> <code>out</code> <code>pointerof</code> <code>private</code> <code>protected</code> <code>rescue</code> <code>return</code> <code>require</code> <code>select</code> <code>sizeof</code> <code>struct</code> <code>super</code> <code>then</code> <code>type</code> <code>typeof</code> <code>uninitialized</code> <code>union</code> <code>unless</code> <code>until</code> <code>when</code> <code>while</code> <code>with</code> <code>yield</code>
<!--
<code>__DIR__</code> <code>__END_LINE__</code> <code>__FILE__</code> <code>__LINE__</code>
-->
== 演算子 ==
Crystalは、1つ、2つ、または3つのオペランドを持つ数多くの演算子をサポートしています<ref>[https://crystal-lang.org/reference/1.5/syntax_and_semantics/operators.html Operators]access-date:2022-07-22</ref>。
演算子式は、実際にはメソッド呼び出しとしてパースされます。例えば、<code>a + b</code> は <code>a.+(b)</code> と意味的に同じで、引数 b を持つ a のメソッド + を呼び出すことになります。
{| class="wikitable"
|+ 演算子の優先度
!種類
!演算子
|-
|インデックス アクセサー
|<code>[]</code>, <code>[]?</code>
|-
|単項
|<code>+</code>, <code>&+</code>, <code>-</code>, <code>&-</code>, <code>!</code>, <code>~</code>
|-
|指数
|<code>**</code>, <code>&**</code>
|-
|乗除
|<code>*</code>, <code>&*</code>, <code>/</code>, <code>//</code>, <code>%</code>
|-
|加減
|<code>+</code>, <code>&+</code>, <code>-</code>, <code>&-</code>
|-
|シフト
|<code><<</code>, <code>>></code>
|-
|ビット間 AND
|<code>&</code>
|-
|ビット間 OR/XOR
|<code><nowiki>|</nowiki></code>,<code>^</code>
|-
|等値
|<code>==</code>, <code>!=</code>, <code>=~</code>, <code>!~</code>, <code>===</code>
|-
|比較
|<code><</code>, <code><=</code>, <code>></code>, <code>>=</code>, <code><=></code>
|-
|論理 AND
|<code>&&</code>
|-
|論理 OR
|<code><nowiki>||</nowiki></code>
|-
|Range
|<code>..</code>, <code>...</code>
|-
|条件
|<code>?:</code>
|-
|代入
|<code>=</code>, <code>[]=</code>, <code>+=</code>, <code>&+=</code>, <code>-=</code>, <code>&-=</code>, <code>*=</code>, <code>&*=</code>, <code>/=</code>, <code>//=</code>, <code>%=</code>, <code><nowiki>|=</nowiki></code>, <code>&=</code>,<code>^=</code>,<code>**=</code>,<code><<=</code>,<code>>>=</code>, <code><nowiki>||=</nowiki></code>, <code>&&=</code>
|-
|スプラット
|<code>*</code>, <code>**</code>
|}
== 制御構造 ==
'''[[w:制御構造|制御構造]]'''(せいぎょこうぞう、''control flow'')とは、「順次」「分岐」「反復」という基本的な処理のことを言います。
{{コラム|Crystalの真理値|2=
制御構造は「条件式」が真であるか偽であるかによって分岐や反復の振る舞いが変わります。
では「条件式」が真・偽はどの様に決まるのでしょう?
Crystalでは <code>false</code> あるいは <code>nil</code> であると偽、それ以外が真です。
なので <code>0</code> も <code>[]</code>(空のArray) も <code>{}</code>(空のNamedTuple)も真です。
}}
=== 条件分岐 ===
Crystalの条件分岐には、[[#if|if]], [[#until|until]] と [[#case|case]]の3つの構文があります。
==== if ====
'''[[w:if|if]]'''は条件式によって実行・否を切り替える構造構文で、評価した式の値を返すので条件演算子でもあります。
;ifの例:<syntaxhighlight lang=crystal line>
a = 0.0 / 0.0
if a < 0
puts "minus"
elsif a > 0
puts "plus"
elsif a == 0
puts "zero"
else
puts a
end
p! (
if a < 0
"minus"
elsif a > 0
"plus"
elsif a == 0
"zero"
else
a
end
)
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
NaN
(if a < 0
"minus"
else
if a > 0
"plus"
else
if a == 0
"zero"
else
a
end
end
end) # => NaN
</syntaxhighlight>
:; elsif節:ifは、オプショナルな elsif 節を設け、条件式が偽であった時に別の条件に合致した処理を実行させることが出来ます。
:; else節:ifは、オプショナルな else 節を設け、条件式が偽であった時に処理を実行させることが出来ます。
: ifは値を返すので、メソッドの実引数に使うことが出来ますし、代入演算の右辺にも使えます。
==== 後置のif ====
Crystalには、RubyやPerlのような後置のifがあります。
;後置のifの例:<syntaxhighlight lang=crystal>
n = 0
puts "nは0" if n == 0
puts "nは1" if n == 1
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
nは0
</syntaxhighlight>
==== unless====
'''unless'''(アンレス)は条件式によって実行・否を切り替える構造構文ですが、ifとは条件式に対する挙動が逆です。
;unless文の例:<syntaxhighlight lang=crystal line>
a = 0.0 / 0.0
unless a == 0
puts "Non-zero"
else
puts a
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Non-zero
</syntaxhighlight>
:; else節 : unless文は、オプショナルな else 節を設け、条件式が真であった時に処理を実行させることが出来ます。
::また、unless文は elsif 節は持てません。
==== 後置のunless ====
Crystalには、RubyやPerlのような後置のunlessがあります。
;後置のunlessの例:<syntaxhighlight lang=crystal>
n = 0
puts "nは0" unless n == 0
puts "nは1" unless n == 1
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
nは1ではない
</syntaxhighlight>
==== case ====
caseは、複数の条件式によって処理を降る分ける用途の為に用意されています。
;caseの例:<syntaxhighlight lang=crystal line>
n = 2
case n
when 1
puts "one"
when 2
puts "two"
when 3
puts "three"
else
puts "other"
end
p! (
case n
when 1
"one"
when 2
"two"
when 3
"three"
else
"other"
end
)
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
two
(case n
when 1
"one"
when 2
"two"
when 3
"three"
else
"other"
end) # => "two"</syntaxhighlight>
:C言語系のswitch文に慣れた人はbreakがないことに気がつくと思います。Crystalのcaseはfall throughしませんし、fall throughさせる方法もありません。
===== when節が定数でなく式を受付けます =====
[[#if|if]]を使ったコードをcaseに書き換えてみましょう。
;case の式の省略:<syntaxhighlight lang=crystal line>
a = 0.0 / 0.0
case
when a < 0
puts "minus"
when a > 0
puts "plus"
when a == 0
puts "zero"
else
puts a
end
p! (
case true
when a < 0
"minus"
when a > 0
"plus"
when a == 0
"zero"
else
a
end
)
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
NaN
(case true
when a < 0
"minus"
when a > 0
"plus"
when a == 0
"zero"
else
a
end) # => NaN
</syntaxhighlight>
このコードは when 節の式の値とcaseの式を <code>===</code> で比較し、最初に一致した when に対応する式が実行される事を利用しています。
===== 型による分岐 =====
when 節が式ではなく型であった場合、caseの式を <code>is_a?</code> で評価し、最初に一致した when に対応する式が実行されます。
;型による分岐:<syntaxhighlight lang=crystal line>
p! 0.class,
0.is_a?(Object),
0.is_a?(Int32),
0.is_a?(Number),
0.is_a?(String)
case 0
when String
puts "String"
when Number
puts "Number"
when Int32
puts "Int32"
when Object
puts "Object"
else
puts "Unknown"
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
0.class # => Int32
0.is_a?(Object) # => true
0.is_a?(Int32) # => true
0.is_a?(Number) # => true
0.is_a?(String) # => false
Number
</syntaxhighlight>
暗黙のオブジェクト構文を使うと
:<syntaxhighlight lang=crystal line>
case 0
when .is_a?(String)
puts "String"
when .is_a?(Number)
puts "Number"
when .is_a(Int32)
puts "Int32"
when .is_a(Object)
puts "Object"
else
puts "Unknown"
end
</syntaxhighlight>
:と書くことが出来ます。
:: メソッドは、.is_a? に限定しないので、 .odd? .even? .include? など Bool を返すメソッドなら何でも使えます。
when に対応する式は、1つのことが珍しくないので、その場合は省略可能な then を補うと、1行で書けます。
:<syntaxhighlight lang=crystal line>
case 0
when String then puts "String"
when Number then puts "Number"
when Int32 then puts "Int32"
when Object then puts "Object"
else puts "Unknown"
end
</syntaxhighlight>
[TODO:タプルとダミー識別子 _ ]
===== 網羅性の検査 =====
when の代わりに in を使用すると、exhaustive case 式が作成されます。exhaustive case では、必要な in 条件を省略するとコンパイル時にエラーとなります。排他的論理和では、when 節と else 節を含むことはできません。
コンパイラは、以下の in 条件をサポートしています。
:<syntaxhighlight lang=crystal line>
case 0
when String then puts "String"
when Number then puts "Number"
when Int32 then puts "Int32"
when Object then puts "Object"
else puts "Unknown"
end
</syntaxhighlight>
caseの式がユニオンの場合、各要素型を条件として使用することができる。
;組合型チェック:<syntaxhighlight lang=crystal line>
var : ( Bool | Int32 | Float64 )?
var = 3.14
p! (
case var
in Bool then var ? 1 : 0
in Int32 then var
in Float64 then var.to_i
end
)
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
(case var
in Bool
var ? 1 : 0
in Int32
var
in Float64
var.to_i
end) # => 3
</syntaxhighlight>
[TODO:case in は enum にも使える]
[TODO:短絡評価 && || ]
=== 繰返し ===
Crystalには、他のプログラミング言語のような[[#繰返し構文|繰返し構文]]と、[[#イテレーターメソッド|イテレーターメソッド]]があります。
==== 繰返し構文 ====
Crystalの繰返し構文には、while と untilの2つがあります<ref>for も do-while も loop もありません。</ref>。
===== while =====
while(ホワイル)は条件が'''真'''である間、式を実行しつづけます。
;構文:<syntaxhighlight lang=crystal>
while 条件式
式1
式2
:
式n
end
</syntaxhighlight>
: Rubyと違い、条件式の後ろに <code>do</code> をつけることは出来ません。
;while文のコード例:<syntaxhighlight lang=crystal line>
i = 0
p! (
while i < 10
p! i
i += 1
break i if i > 5
end
)
</syntaxhighlight>
: 2行目の <code>i < 5</code>が真の間、次の2行を繰返します。
: 4行目の <code>i += 1</code> は <code>i = i + 1</code> の構文糖
;実行結果:<syntaxhighlight lang="text">
(while i < 10
p!(i)
i = i + 1
if i > 5
break i
end
end)# =>
i # => 0
i # => 1
i # => 2
i # => 3
i # => 4
i # => 5
6
</syntaxhighlight>
===== until =====
until(アンティル)は条件が'''偽'''である間、式を実行しつづけます。whileとは条件に対する挙動が逆です。
;構文:<syntaxhighlight lang=crystal>
until 条件式 [ do ]
文1
文2
:
文n
end
</syntaxhighlight>
: <code>do</code> は省略できます。
;untilのコード例:<syntaxhighlight lang=crystal line>
i = 0
until i == 3
puts i
i += 1
end
</syntaxhighlight>
: 2行目の <code>i == 3</code>が偽の間、次の2行を繰返します。
;実行結果:<syntaxhighlight lang="text">
0
1
2
</syntaxhighlight>
===== for =====
Crystalにはforがありませんが、コレクションのイテレーションメソッドを使うことで繰返しを簡素に実現出来ます。
==== Rangeオブジェクト ====
Rangeオブジェクトは、整数の区間を表し範囲演算子 <code>開始 ... 終了</code> で生成します。
;コード:<syntaxhighlight lang=crystal>
rng = 1..3
puts rng.class
rng.each do | n |
puts "#{n}番";
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Range(Int32, Int32)
1番
2番
3番
</syntaxhighlight>
==== Arrayオブジェクト ====
Arrayオブジェクトは、任意の Crystal オブジェクトを要素として持つことができます。
配列式<code>[要素1, 要素2, … 要素n]</code> で生成します。
;コード:<syntaxhighlight lang=crystal>
animals = ["ネコ", "金魚", "ハムスター"]
puts animals.class
animals.each do | animal |
puts "動物 #{animal}"
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Array(String)
動物 ネコ
動物 金魚
動物 ハムスター
</syntaxhighlight>
==== NamedTupleオブジェクト ====
NamedTupleオブジェクトは、任意の Crystal オブジェクトをキーに、任意の Crystal オブジェクトを値に持つことができる連想配列です。
NamedTuple式<code>{キー1 => 値1, キー2 => 値2, キーn => 値n}</code> で生成します。
また、キーが Symbol の場合
NamedTuple式<code>{キー1: 値1, キー2: 値2, キーn: 値n}</code> で生成することが出来ます。
;コード:<syntaxhighlight lang=crystal>
animals = {cat: "ネコ", gold_fish: "金魚", hamster: "ハムスター"}
puts animals.class
animals.each do | en, animal |
puts "動物 #{en}: #{animal}"
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
NamedTuple(cat: String, gold_fish: String, hamster: String)
動物 cat: ネコ
動物 gold_fish: 金魚
動物 hamster: ハムスター
</syntaxhighlight>
このように、Crystalではforがなくてもコレクションのメソッドで同様の処理を実現できます。
===== loop =====
loop、ありません。
while true で代用します。
;loopの代用コード例:<syntaxhighlight lang=crystal line>
i = 1
while true
puts "0b%b" % i
i <<= 1
break if i > 2**8
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
0b1
0b10
0b100
0b1000
0b10000
0b100000
0b1000000
0b10000000
0b100000000
</syntaxhighlight>
:5行目の、<code>break if i > 2**8</code>でループを脱出するようにしています。この様に break や return あるいは例外が上がらないとループは永久に終わりません。
:このコードは、Crystalにはない do-while文を模倣する例にもなっています。
==== イテレーターメソッド ====
===== Integer#times =====
Integer#timesは与えられたブロックをオブジェクトの示す整数値回くりかえします。
:コード<syntaxhighlight lang=crystal>
3.times{ puts "Hello, world!" }
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Hello, world!
Hello, world!
Hello, world!
</syntaxhighlight>
;繰返したい処理が2行以上ある場合:<syntaxhighlight lang=crystal>
3.times {
puts "Hello"
puts "World"
puts ""
}
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Hello
World
Hello
World
Hello
World
</syntaxhighlight>
;ループ変数を使た例:<syntaxhighlight lang=crystal>
3.times do |i|
puts "#{i}の倍は#{2 * i}"
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
0の倍は0
1の倍は2
2の倍は4
</syntaxhighlight>
;ブロックを伴わないtimesメソッド:<syntaxhighlight lang=crystal>
iter = 3.times
puts iter.class
p! iter.next
p! iter.next
p! iter.next
p! iter.next
p! iter.next
p! iter.next
# puts iter.next # `next': StopIteration: iteration reached an end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Int::TimesIterator(Int32)
iter.next # => 0
iter.next # => 1
iter.next # => 2
iter.next # => #<Iterator::Stop:0x7fb5bedd7fe0>
iter.next # => #<Iterator::Stop:0x7fb5bedd7fe0>
iter.next # => #<Iterator::Stop:0x7fb5bedd7fe0>
</syntaxhighlight>
: Integer#times にブロックを渡さないと、Int::TimesIterator([T])オブジェクトが返ります。
: Int::TimesIterator([T])オブジェクトは外部イテレーターと呼ばれnextメソッドで反復を行えます。
==== クラスのメソッド一覧 ====
Crystal には、Objectクラスにmethodsメソッドがないので、マクロで実装しました。
;RubyのObject#methods:<syntaxhighlight lang=ruby>
p Object.methods.sort,
Integer.methods.sort,
Float.methods.sort,
Array.methods.sort,
Range.methods.sort
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
[:!, :!=, :!~, :<, :<=, :<=>, :==, :===, :=~, :>, :>=, :__id__, :__send__, :alias_method, :allocate, :ancestors, :attr, :attr_accessor, :attr_reader, :attr_writer, :autoload, :autoload?, :class, :class_eval, :class_exec, :class_variable_defined?, :class_variable_get, :class_variable_set, :class_variables, :clone, :const_defined?, :const_get, :const_missing, :const_set, :const_source_location, :constants, :define_method, :define_singleton_method, :deprecate_constant, :display, :dup, :enum_for, :eql?, :equal?, :extend, :freeze, :frozen?, :hash, :include, :include?, :included_modules, :inspect, :instance_eval, :instance_exec, :instance_method, :instance_methods, :instance_of?, :instance_variable_defined?, :instance_variable_get, :instance_variable_set, :instance_variables, :is_a?, :itself, :kind_of?, :method, :method_defined?, :methods, :module_eval, :module_exec, :name, :new, :nil?, :object_id, :prepend, :private_class_method, :private_constant, :private_instance_methods, :private_method_defined?, :private_methods, :protected_instance_methods, :protected_method_defined?, :protected_methods, :public_class_method, :public_constant, :public_instance_method, :public_instance_methods, :public_method, :public_method_defined?, :public_methods, :public_send, :remove_class_variable, :remove_instance_variable, :remove_method, :respond_to?, :send, :singleton_class, :singleton_class?, :singleton_method, :singleton_methods, :subclasses, :superclass, :taint, :tainted?, :tap, :then, :to_enum, :to_s, :trust, :undef_method, :untaint, :untrust, :untrusted?, :yield_self]
[:!, :!=, :!~, :<, :<=, :<=>, :==, :===, :=~, :>, :>=, :__id__, :__send__, :alias_method, :allocate, :ancestors, :attr, :attr_accessor, :attr_reader, :attr_writer, :autoload, :autoload?, :class, :class_eval, :class_exec, :class_variable_defined?, :class_variable_get, :class_variable_set, :class_variables, :clone, :const_defined?, :const_get, :const_missing, :const_set, :const_source_location, :constants, :define_method, :define_singleton_method, :deprecate_constant, :display, :dup, :enum_for, :eql?, :equal?, :extend, :freeze, :frozen?, :hash, :include, :include?, :included_modules, :inspect, :instance_eval, :instance_exec, :instance_method, :instance_methods, :instance_of?, :instance_variable_defined?, :instance_variable_get, :instance_variable_set, :instance_variables, :is_a?, :itself, :kind_of?, :method, :method_defined?, :methods, :module_eval, :module_exec, :name, :nil?, :object_id, :prepend, :private_class_method, :private_constant, :private_instance_methods, :private_method_defined?, :private_methods, :protected_instance_methods, :protected_method_defined?, :protected_methods, :public_class_method, :public_constant, :public_instance_method, :public_instance_methods, :public_method, :public_method_defined?, :public_methods, :public_send, :remove_class_variable, :remove_instance_variable, :remove_method, :respond_to?, :send, :singleton_class, :singleton_class?, :singleton_method, :singleton_methods, :sqrt, :subclasses, :superclass, :taint, :tainted?, :tap, :then, :to_enum, :to_s, :trust, :try_convert, :undef_method, :untaint, :untrust, :untrusted?, :yield_self]
[:!, :!=, :!~, :<, :<=, :<=>, :==, :===, :=~, :>, :>=, :__id__, :__send__, :alias_method, :allocate, :ancestors, :attr, :attr_accessor, :attr_reader, :attr_writer, :autoload, :autoload?, :class, :class_eval, :class_exec, :class_variable_defined?, :class_variable_get, :class_variable_set, :class_variables, :clone, :const_defined?, :const_get, :const_missing, :const_set, :const_source_location, :constants, :define_method, :define_singleton_method, :deprecate_constant, :display, :dup, :enum_for, :eql?, :equal?, :extend, :freeze, :frozen?, :hash, :include, :include?, :included_modules, :inspect, :instance_eval, :instance_exec, :instance_method, :instance_methods, :instance_of?, :instance_variable_defined?, :instance_variable_get, :instance_variable_set, :instance_variables, :is_a?, :itself, :kind_of?, :method, :method_defined?, :methods, :module_eval, :module_exec, :name, :nil?, :object_id, :prepend, :private_class_method, :private_constant, :private_instance_methods, :private_method_defined?, :private_methods, :protected_instance_methods, :protected_method_defined?, :protected_methods, :public_class_method, :public_constant, :public_instance_method, :public_instance_methods, :public_method, :public_method_defined?, :public_methods, :public_send, :remove_class_variable, :remove_instance_variable, :remove_method, :respond_to?, :send, :singleton_class, :singleton_class?, :singleton_method, :singleton_methods, :subclasses, :superclass, :taint, :tainted?, :tap, :then, :to_enum, :to_s, :trust, :undef_method, :untaint, :untrust, :untrusted?, :yield_self]
[:!, :!=, :!~, :<, :<=, :<=>, :==, :===, :=~, :>, :>=, :[], :__id__, :__send__, :alias_method, :allocate, :ancestors, :attr, :attr_accessor, :attr_reader, :attr_writer, :autoload, :autoload?, :class, :class_eval, :class_exec, :class_variable_defined?, :class_variable_get, :class_variable_set, :class_variables, :clone, :const_defined?, :const_get, :const_missing, :const_set, :const_source_location, :constants, :define_method, :define_singleton_method, :deprecate_constant, :display, :dup, :enum_for, :eql?, :equal?, :extend, :freeze, :frozen?, :hash, :include, :include?, :included_modules, :inspect, :instance_eval, :instance_exec, :instance_method, :instance_methods, :instance_of?, :instance_variable_defined?, :instance_variable_get, :instance_variable_set, :instance_variables, :is_a?, :itself, :kind_of?, :method, :method_defined?, :methods, :module_eval, :module_exec, :name, :new, :nil?, :object_id, :prepend, :private_class_method, :private_constant, :private_instance_methods, :private_method_defined?, :private_methods, :protected_instance_methods, :protected_method_defined?, :protected_methods, :public_class_method, :public_constant, :public_instance_method, :public_instance_methods, :public_method, :public_method_defined?, :public_methods, :public_send, :remove_class_variable, :remove_instance_variable, :remove_method, :respond_to?, :send, :singleton_class, :singleton_class?, :singleton_method, :singleton_methods, :subclasses, :superclass, :taint, :tainted?, :tap, :then, :to_enum, :to_s, :trust, :try_convert, :undef_method, :untaint, :untrust, :untrusted?, :yield_self]
[:!, :!=, :!~, :<, :<=, :<=>, :==, :===, :=~, :>, :>=, :__id__, :__send__, :alias_method, :allocate, :ancestors, :attr, :attr_accessor, :attr_reader, :attr_writer, :autoload, :autoload?, :class, :class_eval, :class_exec, :class_variable_defined?, :class_variable_get, :class_variable_set, :class_variables, :clone, :const_defined?, :const_get, :const_missing, :const_set, :const_source_location, :constants, :define_method, :define_singleton_method, :deprecate_constant, :display, :dup, :enum_for, :eql?, :equal?, :extend, :freeze, :frozen?, :hash, :include, :include?, :included_modules, :inspect, :instance_eval, :instance_exec, :instance_method, :instance_methods, :instance_of?, :instance_variable_defined?, :instance_variable_get, :instance_variable_set, :instance_variables, :is_a?, :itself, :kind_of?, :method, :method_defined?, :methods, :module_eval, :module_exec, :name, :new, :nil?, :object_id, :prepend, :private_class_method, :private_constant, :private_instance_methods, :private_method_defined?, :private_methods, :protected_instance_methods, :protected_method_defined?, :protected_methods, :public_class_method, :public_constant, :public_instance_method, :public_instance_methods, :public_method, :public_method_defined?, :public_methods, :public_send, :remove_class_variable, :remove_instance_variable, :remove_method, :respond_to?, :send, :singleton_class, :singleton_class?, :singleton_method, :singleton_methods, :subclasses, :superclass, :taint, :tainted?, :tap, :then, :to_enum, :to_s, :trust, :undef_method, :untaint, :untrust, :untrusted?, :yield_self]
</syntaxhighlight>
;Crystalに実装したmethodsマクロ:<syntaxhighlight lang=crystal>
class Object
macro methods
{{ @type.methods.map(&.name.stringify).sort.uniq }}
end
end
p! Object.methods,
Reference.methods,
Array.methods,
Box.methods,
Channel.methods,
Deque.methods,
Dir.methods,
Exception.methods,
ArgumentError.methods,
DivisionByZeroError.methods,
IndexError.methods,
InvalidByteSequenceError.methods,
Fiber.methods,
Hash.methods,
IO.methods,
File.methods,
Mutex.methods,
PrettyPrint.methods,
Process.methods,
Regex.methods,
String.methods,
Thread.methods,
Bool.methods,
Int32.methods,
Float64.methods,
Proc.methods
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Object.methods # => ["!=", "!~", "==", "===", "=~", "class", "crystal_type_id", "dup", "hash", "in?", "inspect", "itself", "not_nil!", "pretty_inspect", "pretty_print", "tap", "to_s", "try", "unsafe_as"]
Reference.methods # => ["==", "dup", "exec_recursive", "exec_recursive_clone", "hash", "inspect", "object_id", "pretty_print", "same?", "to_s"]
Array.methods # => ["&", "*", "+", "-", "<<", "<=>", "==", "[]", "[]=", "[]?", "calculate_new_capacity", "check_needs_resize", "check_needs_resize_for_unshift", "clear", "clone", "compact", "compact!", "concat", "delete", "delete_at", "dup", "each_repeated_permutation", "fill", "first", "flatten", "increase_capacity", "increase_capacity_for_unshift", "index", "initialize", "insert", "inspect", "internal_delete", "last", "map", "map_with_index", "needs_resize?", "pop", "pop?", "pretty_print", "product", "push", "reject!", "remaining_capacity", "repeated_permutations", "replace", "reset_buffer_to_root_buffer", "resize_if_cant_insert", "resize_to_capacity", "resize_to_capacity_for_unshift", "reverse", "root_buffer", "rotate", "rotate!", "select!", "shift", "shift?", "shift_buffer_by", "shift_when_not_empty", "shuffle", "size", "size=", "skip", "sort", "sort!", "sort_by", "sort_by!", "to_a", "to_lookup_hash", "to_s", "to_unsafe", "to_unsafe_slice", "transpose", "truncate", "uniq", "uniq!", "unsafe_fetch", "unsafe_put", "unshift", "unstable_sort", "unstable_sort!", "unstable_sort_by", "unstable_sort_by!", "|"]
Box.methods # => ["initialize", "object"]
Channel.methods # => ["close", "closed?", "dequeue_receiver", "dequeue_sender", "initialize", "inspect", "pretty_print", "receive", "receive?", "receive_impl", "receive_internal", "receive_select_action", "receive_select_action?", "send", "send_internal", "send_select_action"]
Deque.methods # => ["+", "<<", "==", "buffer", "clear", "clone", "concat", "delete", "delete_at", "dup", "each", "halfs", "increase_capacity", "initialize", "insert", "inspect", "internal_delete", "pop", "pop?", "pretty_print", "push", "reject!", "rotate!", "select!", "shift", "shift?", "size", "size=", "to_s", "unsafe_fetch", "unsafe_put", "unshift"]
Dir.methods # => ["children", "close", "each", "each_child", "entries", "initialize", "inspect", "path", "pretty_print", "read", "rewind", "to_s"]
Exception.methods # => ["backtrace", "backtrace?", "callstack", "callstack=", "cause", "initialize", "inspect", "inspect_with_backtrace", "message", "to_s"]
ArgumentError.methods # => ["initialize"]
DivisionByZeroError.methods # => ["initialize"]
IndexError.methods # => ["initialize"]
InvalidByteSequenceError.methods # => ["initialize"]
Fiber.methods # => ["cancel_timeout", "dead?", "enqueue", "initialize", "inspect", "makecontext", "name", "name=", "next", "next=", "previous", "previous=", "push_gc_roots", "resumable?", "resume", "resume_event", "run", "running?", "stack_bottom", "stack_bottom=", "timeout", "timeout_event", "timeout_select_action", "timeout_select_action=", "to_s"]
Hash.methods # => ["==", "[]", "[]=", "[]?", "add_entry_and_increment_size", "clear", "clear_entries", "clear_impl", "clear_indices", "clone", "compact", "compact!", "compare_by_identity", "compare_by_identity?", "compute_indices_bytesize", "delete", "delete_entry", "delete_entry_and_update_counts", "delete_impl", "delete_linear_scan", "dig", "dig?", "do_compaction", "double_indices_size", "dup", "each", "each_entry_with_index", "each_key", "each_value", "empty?", "entries", "entries_capacity", "entries_full?", "entries_size", "entry_matches?", "fetch", "find_entry", "find_entry_with_index", "find_entry_with_index_linear_scan", "first_entry?", "first_key", "first_key?", "first_value", "first_value?", "fit_in_indices", "get_entry", "get_index", "has_key?", "has_value?", "hash", "indices_malloc_size", "indices_size", "initialize", "initialize_clone", "initialize_clone_entries", "initialize_compare_by_identity", "initialize_copy_non_entries_vars", "initialize_default_block", "initialize_dup", "initialize_dup_entries", "inspect", "invert", "key_for", "key_for?", "key_hash", "keys", "last_entry?", "last_key", "last_key?", "last_value", "last_value?", "malloc_entries", "malloc_indices", "merge", "merge!", "merge_into!", "next_index", "pretty_print", "proper_subset_of?", "proper_superset_of?", "put", "realloc_entries", "realloc_indices", "rehash", "reject", "reject!", "resize", "select", "select!", "set_entry", "set_index", "shift", "shift?", "size", "subset_of?", "superset_of?", "to_a", "to_a_impl", "to_h", "to_s", "transform_keys", "transform_values", "transform_values!", "update", "update_linear_scan", "upsert", "values", "values_at"]
IO.methods # => ["<<", "check_open", "close", "closed?", "decoder", "each_byte", "each_char", "each_line", "encoder", "encoding", "flush", "getb_to_end", "gets", "gets_peek", "gets_slow", "gets_to_end", "has_non_utf8_encoding?", "peek", "peek_or_read_utf8", "peek_or_read_utf8_masked", "pos", "pos=", "print", "printf", "puts", "read", "read_at", "read_byte", "read_bytes", "read_char", "read_char_with_bytesize", "read_fully", "read_fully?", "read_line", "read_string", "read_utf8", "read_utf8_byte", "rewind", "seek", "set_encoding", "skip", "skip_to_end", "tell", "tty?", "utf8_encoding?", "write", "write_byte", "write_bytes", "write_string", "write_utf8"]
File.methods # => ["delete", "initialize", "inspect", "path", "read_at", "size", "truncate"]
Mutex.methods # => ["initialize", "lock", "lock_slow", "synchronize", "try_lock", "unlock"]
PrettyPrint.methods # => ["break_outmost_groups", "breakable", "comma", "current_group", "fill_breakable", "flush", "group", "group_queue", "group_sub", "indent", "initialize", "list", "nest", "newline", "surround", "text"]
Process.methods # => ["channel", "close", "close_io", "copy_io", "ensure_channel", "error", "error?", "exists?", "finalize", "initialize", "input", "input?", "output", "output?", "pid", "signal", "stdio_to_fd", "terminate", "terminated?", "wait"]
Regex.methods # => ["+", "==", "===", "=~", "capture_count", "clone", "dup", "finalize", "hash", "initialize", "inspect", "internal_matches?", "match", "match_at_byte_index", "matches?", "matches_at_byte_index?", "name_table", "options", "source", "to_s"]
String.methods # => ["%", "*", "+", "<=>", "==", "=~", "[]", "[]?", "ascii_only?", "blank?", "byte_at", "byte_at?", "byte_delete_at", "byte_index", "byte_index_to_char_index", "byte_slice", "byte_slice?", "bytes", "bytesize", "calc_excess_left", "calc_excess_right", "camelcase", "capitalize", "center", "char_at", "char_bytesize_at", "char_index_to_byte_index", "chars", "check_no_null_byte", "chomp", "clone", "codepoint_at", "codepoints", "compare", "count", "delete", "delete_at", "downcase", "dump", "dump_char", "dump_hex", "dump_or_inspect", "dump_or_inspect_char", "dump_or_inspect_unquoted", "dump_unquoted", "dup", "each_byte", "each_byte_index_and_char_index", "each_char", "each_char_with_index", "each_codepoint", "each_grapheme", "each_grapheme_boundary", "each_line", "empty?", "encode", "ends_with?", "find_start_and_end", "grapheme_size", "graphemes", "gsub", "gsub_append", "gsub_ascii_char", "has_back_references?", "hash", "hexbytes", "hexbytes?", "includes?", "index", "insert", "insert_impl", "inspect", "inspect_char", "inspect_unquoted", "just", "lchop", "lchop?", "lines", "ljust", "lstrip", "match", "matches?", "partition", "presence", "pretty_print", "rchop", "rchop?", "remove_excess", "remove_excess_left", "remove_excess_right", "reverse", "rindex", "rjust", "rpartition", "rstrip", "scan", "scan_backreferences", "scrub", "single_byte_optimizable?", "size", "size_known?", "split", "split_by_empty_separator", "split_single_byte", "squeeze", "starts_with?", "strip", "sub", "sub_append", "sub_index", "sub_range", "succ", "titleize", "to_f", "to_f32", "to_f32?", "to_f64", "to_f64?", "to_f?", "to_f_impl", "to_i", "to_i128", "to_i128?", "to_i16", "to_i16?", "to_i32", "to_i32?", "to_i64", "to_i64?", "to_i8", "to_i8?", "to_i?", "to_s", "to_slice", "to_u128", "to_u128?", "to_u16", "to_u16?", "to_u32", "to_u32?", "to_u64", "to_u64?", "to_u8", "to_u8?", "to_unsafe", "to_unsigned_info", "to_utf16", "tr", "underscore", "unicode_delete_at", "unsafe_byte_at", "unsafe_byte_slice", "unsafe_byte_slice_string", "upcase", "valid_encoding?"]
Thread.methods # => ["detach", "event_base", "gc_thread_handler", "gc_thread_handler=", "initialize", "join", "main_fiber", "next", "next=", "previous", "previous=", "scheduler", "stack_address", "start", "to_unsafe"]
Bool.methods # => ["!=", "&", "==", "^", "clone", "hash", "to_s", "to_unsafe", "|"]
Int32.methods # => ["!=", "&", "&*", "&+", "&-", "*", "+", "-", "/", "<", "<=", "==", ">", ">=", "^", "clone", "leading_zeros_count", "popcount", "to_f", "to_f!", "to_f32", "to_f32!", "to_f64", "to_f64!", "to_i", "to_i!", "to_i128", "to_i128!", "to_i16", "to_i16!", "to_i32", "to_i32!", "to_i64", "to_i64!", "to_i8", "to_i8!", "to_u", "to_u!", "to_u128", "to_u128!", "to_u16", "to_u16!", "to_u32", "to_u32!", "to_u64", "to_u64!", "to_u8", "to_u8!", "trailing_zeros_count", "unsafe_chr", "unsafe_div", "unsafe_mod", "unsafe_shl", "unsafe_shr", "|"]
Float64.methods # => ["!=", "*", "**", "+", "-", "/", "<", "<=", "==", ">", ">=", "ceil", "clone", "fdiv", "floor", "next_float", "prev_float", "round_away", "round_even", "to_f", "to_f!", "to_f32", "to_f32!", "to_f64", "to_f64!", "to_i", "to_i!", "to_i128", "to_i128!", "to_i16", "to_i16!", "to_i32", "to_i32!", "to_i64", "to_i64!", "to_i8", "to_i8!", "to_s", "to_u", "to_u!", "to_u128", "to_u128!", "to_u16", "to_u16!", "to_u32", "to_u32!", "to_u64", "to_u64!", "to_u8", "to_u8!", "trunc"]
Proc.methods # => ["==", "===", "arity", "call", "clone", "closure?", "closure_data", "hash", "internal_representation", "partial", "pointer", "to_s"]</syntaxhighlight>
== 脚註 ==
<references />
== 外部リンク ==
* [https://crystal-lang.org/ The Crystal Programming Language] {{---}} 公式サイト
** [https://crystal-lang.org/api/1.5.0/ Crystal 1.5.0 リファレンス]
** [https://play.crystal-lang.org/#/cr Compile & run code in Crystal] {{---}} playground
[[Category:Crystal|*]]
[[Category:プログラミング言語]]
{{NDC|007.64}}
tus49cpvxgs1u6mbysue8hj1vsuxq9u
205714
205712
2022-07-23T00:47:48Z
Ef3
694
/*メソッド*//* クラスのメソッド一覧 */ 節のレベル変更
wikitext
text/x-wiki
{{Pathnav|メインページ|工学|情報技術|プログラミング|frame=1}}
{{Wikipedia|Crystal (プログラミング言語)}}
本書は、[[w:Crystal (プログラミング言語)|Crystal]]のチュートリアルです。
'''Crystal'''は、Ary Borenszweig、Juan Wajnerman、Brian Cardiffと300人以上の貢献者によって設計・開発された[汎用オブジェクト指向プログラミング言語です<ref>{{Cite web
|url=https://github.com/crystal-lang/crystal/graphs/contributors
|title=Contributors
|accessdate=2022-07-18
|website=github.com
}}</ref>。[[Ruby]] にヒントを得た構文を持ち、静的型チェックを備えた [[コンパイル型言語]]ですが、変数やメソッドの引数の型は一般には不要です。型は高度なグローバル[[型推論]]アルゴリズムによって解決される。<ref>{{Cite web
|url=http://crystal-lang.org/2013/09/23/type-inference-part-1.html
|title=Type inference part 1
|last=Brian J.
|first=Cardiff
|date=2013-09-09
|accessdate=2022-07-18
|website=crystal-lang.org
}}</ref>Crystalは[[Apache License]]バージョン2.0のもと、FOSSとしてリリースされています。
__TOC__
== Hello, World! ==
他の多くのチュートリアルがそうであるように、
私たちもまずはCrystalの世界にあいさつすることから始めましょう。
Rubyとの比較も兼ねて、[[Ruby#Hello, World!]]をそのまま実行してみます。
''hello.cr''というファイルを作り、次のように書いて保存して下さい<ref>Crystalのソースファイルの拡張子は''.cr'' です</ref>。
;hello.cr:<syntaxhighlight lang=Crystal>
puts 'Hello, World!'
</syntaxhighlight>
;コマンドラインでの操作:<syntaxhighlight lang="console">
% cat hello.cr
puts 'Hello, World!'
% crystal hello.cr
In hello.cr:1:6
1 | puts 'Hello, World!'
^
Error: unterminated char literal, use double quotes for strings
% sed -i -e "s@'@Q@g" -e 's@Q@"@g' hello.cr
% cat hello.cr
puts "Hello, World!"
% crystal hello.cr
Hello, World!
</syntaxhighlight>
この1行のスクリプトは、メソッド<code>puts</code> に文字リテラル<code>"Hello, World!"</code>を渡し呼出しています。
このプログラムは、[[Ruby#Hello, World!]]と同じですが、Crystalでは文字列リテラルは <code>"…"</code> で囲うのでそれだけ変更しました。
[TODO: コマンドラインツール crystal の解説。 crystal ファイル名 は crystal run ファイル名 の短縮形で、インタープリタ的な実行…ではなく、内部ビルドツールでコンパイル・実行を行う]
== Ruby との違い ==
Crystalは、Rubyに触発された構文を持つものの、Rubyとの互換性をゴールに定めては'''いません'''。
このため、細部を見ると仕様に差異があり、Rubyのソースコードをcrystalに掛けるても前節の 'Hello World' の様にコンパイルに失敗することがあります。
また、コンパイルできても実行結果に違いが出ることがあります。
ここでは、Ruby との違いについて実際のコードと双方の結果を比較することで、差異についての理解を深めていきます。
=== 整数型の特性 ===
;大きな整数:<syntaxhighlight lang=Crystal>
p 2 ** 999
p (2 ** 999).class
</syntaxhighlight>
;rubyの実行結果:<syntaxhighlight lang="console">
5357543035931336604742125245300009052807024058527668037218751941851755255624680612465991894078479290637973364587765734125935726428461570217992288787349287401967283887412115492710537302531185570938977091076523237491790970633699383779582771973038531457285598238843271083830214915826312193418602834034688
Integer
</syntaxhighlight>
;crystalの実行結果:<syntaxhighlight lang="console">
Unhandled exception: Arithmetic overflow (OverflowError)
from /usr/local/share/crystal/share/crystal/src/int.cr:295:9 in '**'
from pow.cr:1:1 in '__crystal_main'
from /usr/local/share/crystal/share/crystal/src/crystal/main.cr:115:5 in 'main_user_code'
from /usr/local/share/crystal/share/crystal/src/crystal/main.cr:101:7 in 'main'
from /usr/local/share/crystal/share/crystal/src/crystal/main.cr:127:3 in 'main'
from /usr/local/lib64/libc.so.6 in '__libc_start_main'
from /usr/local/.cache/crystal/crystal-run-pow.tmp in '_start'
from ???
</syntaxhighlight>
: Ruby の整数は、桁あふれが起こると自動的に多倍長整数に型変換されるので、継ぎ目なしに大きな数を扱うアルゴルズムが使えます。
: Crystal の整数は、固定長です(大きさについては[[#リテラルと型|後述]])。なので大きな答えになる式を評価すると桁あふれが生じます。桁あふれが生じますが、C言語のように寡黙に処理を続けるのではなく、実行時に例外(OverflowError)が上がるので、例外を捕捉し然るべき処置を施すことが可能です。
==== BigInt ====
<code>big</code> を <code>require</code> すると <code>BigInt</code> が使えるようになります。
;BigInt:<syntaxhighlight lang=Crystal>
require "big"
p BigInt.new(2) ** 999
p (BigInt.new(2) ** 999).class
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="console">
5357543035931336604742125245300009052807024058527668037218751941851755255624680612465991894078479290637973364587765734125935726428461570217992288787349287401967283887412115492710537302531185570938977091076523237491790970633699383779582771973038531457285598238843271083830214915826312193418602834034688
BigInt
</syntaxhighlight>
: BigIntはプリミティブではなので、リテラル表現はありません。また、
::<syntaxhighlight lang=Crystal>
n : BigInt = 2
</syntaxhighlight>
::<syntaxhighlight lang=console>
Error: type must be BigInt, not Int32
</syntaxhighlight>
:: のように型アノテーションすることも出来ません。
=== リテラルと型 ===
;様々なリテラルと型:<syntaxhighlight lang=Crystal>
[nil, false, true, 42, 2.73, 'Q', "string", [1,2,3], {a:1, b:2}].each{|x|
p [x, x.class]
}
</syntaxhighlight>
;rubyの実行結果:<syntaxhighlight lang="console">
[nil, NilClass]
[false, FalseClass]
[true, TrueClass]
[42, Integer]
[2.73, Float]
["Q", String]
["string", String]
[[1, 2, 3], Array]
[{:a=>1, :b=>2}, Hash]
</syntaxhighlight>
;crystalの実行結果:<syntaxhighlight lang="console">
[nil, Nil]
[false, Bool]
[true, Bool]
[42, Int32]
[2.73, Float64]
['Q', Char]
["string", String]
[[1, 2, 3], Array(Int32)]
[{a: 1, b: 2}, NamedTuple(a: Int32, b: Int32)]
</syntaxhighlight>
: Crystal の整数は Int32、浮動小数点数は Float64 です。
;サイズを指定した数リテラル:<syntaxhighlight lang=Crystal>
[1_i64, 2_u32, 3_u64, 4_i32, 5_i16, 6_u8, 7_i128, 8_u128, 3.14_f32, 1.44_f64].each{|x|
p [x, x.class]
}
</syntaxhighlight>
;ruby:Rubyでは、サーフィックスの付いた数値リテラルは無効
;crystalの実行結果:<syntaxhighlight lang="console">
[1, Int64]
[2, UInt32]
[3, UInt64]
[4, Int32]
[5, Int16]
[6, UInt8]
[7, Int128]
[8, UInt128]
[3.14, Float32]
[1.44, Float64]
</syntaxhighlight>
: Crystal では、数値リテラルに _ で始まるサーフィックスを付け { i:符号付き整数, u:符号なし整数, f:浮動小数点数 } と { 8,16,32,64,128 } のビット幅の組合せです<ref>[https://crystal-lang.org/reference/1.5/syntax_and_semantics/literals/ Literals]</ref>。
=== for式がない ===
Crystal には、Ruby にはある for式がありません。
;Rubyのfor式の構文:<syntaxhighlight lang="ruby">
for 変数 in コレクション
文
end
</syntaxhighlight>
:コレクションは Range, Array, Hash など内部構造を持つオブジェクトです。
:for式は、最後に評価した値を返すので、for'''式'''です。
;for式のeachメソッドによる置換え:<syntaxhighlight lang="ruby">
for x in [ 2, 3, 5, 7, 11 ] do
p x
end
# ↓
[ 2, 3, 5, 7, 11 ].each do | x |
p x
end
</syntaxhighlight>
: の様にコレクションの each メソッドで置換え可能なので、Rubyからの移植でも小規模な書換えで済みます<ref>[https://github.com/crystal-lang/crystal/issues/830 "For" Loop support #830]</ref>(後述のマクロで実装できないかと思いましたが、いまのところ無理のようです)。
また loop 式もありませんが while true; … end で間に合います。Ruby では while 式の条件の次に do が置けますが、Crystal では置けません。
=== eval()がない ===
Crystal には eval() はありません。
Crystalはコンパイル型言語ですので、無理もないことです。
もし、Crystal で eval() を実装しようとすると、Common Lisp の様にインタープリターを丸ごとランタイムに含む必要があります。
これはリーズナブルな選択ではありません。
Crystal では、eval() が必要なケースに(限定的ですが)マクロを使うことが出来る可能性があります。
=== マクロ ===
Crystalには、Rubyにはないマクロがあります<ref>[https://crystal-lang.org/reference/1.5/syntax_and_semantics/macros/ Macros - Crystal]</ref>。Rubyは実行時にすべてのオブジェクトにアクセス出来て、メソッド生やし放題なのでマクロは必要ありませんが、Crystalはコンパイル時に型やメソッドを確定する必要があり、特にメソッドジェネレターとしてのマクロにニーズがあります。また、テンプレート言語的なマクロなので、環境変数による条件分岐や、コンテナを渡し繰返し処理する構文もあります(面白いことにマクロには for 文があり、反対にマクロの中では、eachメソッドは使えません)。マクロには <code><nowiki>{{</nowiki>attr.id}}</code> の様にASTへのアクセス手順が用意されており、半ば言語を拡張するようなアプローチを取ることも出来ます。
[TODO:ASTについての解説;コラム向き?]
;マクロを使ったattr_accessorのイミュレーション:<syntaxhighlight lang=crystal>
class Point
def initialize(@x : Int32, @y : Int32)
end
# macro定義
macro attr_accessor(*attrs)
{% for attr in attrs %}
def {{attr.id}}() @{{attr.id}} end
def {{attr.id}}=(var) @{{attr.id}} = var end
{% end %}
end
# macro呼出し
attr_accessor :x, :y
end
pt = Point.new(20, 30)
p [pt.x, pt.y]
t = pt.x
pt.x = pt.y
pt.y = t
p [pt.x, pt.y]
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
[20, 30]
[30, 20]
</syntaxhighlight>
: Ruby には、attr_accessor と言う「クラスのメンバーのアクセサーを自動生成するメソッド」がありますが、Crystalにはないようなので、マクロで実装しました。
:: attr_accessor :name からは
::<syntaxhighlight lang=ruby>
def name() @name end
def name=(val) @name = val end
</syntaxhighlight>相当のコードが生成されます。
[TODO:マクロの機能と構文の説明 *の付いた引数、 <nowiki>{{</nowiki>引数}}、{% … %} 構文]
==== マクロ p! ====
メソッド p は、与えられた「式」の inspaect() の返す値を puts しますが、マクロ p! は、それに先んじて(評価前の)「式」を表示します<ref>[https://crystal-lang.org/api/1.5.0/Crystal/Macros.html#p%21%28%2Aexpressions%29%3ANop-instance-method def p!(*expressions) : Nop]</ref>。
;p!の例:<syntaxhighlight lang=crystal>
x, y = true, false
p! x,y,x && y, x || y, x ^ y, !x, x != y, x == y
ary = [ 1, 2, 3 ]
p! ary
p! ary.map(&. << 1)
p! ary.map(&.to_f)
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
x # => true
y # => false
x && y # => false
x || y # => true
x ^ y # => true
!x # => false
x != y # => true
x == y # => false
ary # => [1, 2, 3]
ary.map(&.<<(1)) # => [2, 4, 6]
ary.map(&.to_f) # => [1.0, 2.0, 3.0]
</syntaxhighlight>
===== 入れ子のp! =====
マクロ p! は入れ子に出来ます。また、一旦ASTに変換してから再度ソースコードに変換するので、等価な別の構文に変換されることがあります。
;入れ子のp!:<syntaxhighlight lang=crystal>
p! (
100.times{|i|
p! i
break i if i > 12
}
)
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
(100.times do |i|
p!(i)
if i > 12
break i
end
end) # => i
# => 0
i # => 1
i # => 2
i # => 3
i # => 4
i # => 5
i # => 6
i # => 7
i # => 8
i # => 9
i # => 10
i # => 11
i # => 12
i # => 13
13
</syntaxhighlight>
=== クラス ===
==== シンプルなクラス ====
;シンプルなクラス:<syntaxhighlight lang=crystal highlight="2" line>
class Hello
def initialize(@name : String = "World")
end
def greeting
puts "Hello #{@name}!"
end
end
hello = Hello.new()
hello.greeting
universe = Hello.new("Universe")
universe.greeting
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
Hello World!
Hello Universe!
</syntaxhighlight>
:;初期化メソッド
:: <syntaxhighlight lang=crystal line start=4>
def initialize(@name : String = "World")
end
</syntaxhighlight>
::Rubyであれば
:: <syntaxhighlight lang=ruby line start=4>
def initialize(name = "World")
@name = name
end
</syntaxhighlight>
::とするところですが、Crystalでは、型アノテーション <code> : String</code> を使い、引数の型を限定しました。
::また、(@ 付きの)アトリビュート名を仮引数にすると、そのままアトリビュート(a.k.a. インスタンス変数)に仮引数が代入されます。
::これは、C++のコンストラクターのメンバー初期化リストと同じアイディアですが、Crystalではインスタンス変数に @ が前置されるので、仮引数に @ が出現すればインスタンス変数の初期値だと自明で、聡明な選択です。
==== 都市間の大圏距離 ====
[[Ruby#ユーザー定義クラス]]の都市間の大圏距離を求めるメソッドを追加した例を、Crystalに移植しました。
;都市間の大圏距離:<syntaxhighlight lang=crystal highlight=”2,7,12” line>
class GeoCoord
getter :longitude, :latitude
def initialize(@longitude : Float64, @latitude : Float64)
end
def to_s(io)
ew, ns = "東経", "北緯"
long, lat = @longitude, @latitude
ew, long = "西経", -long if long < 0.0
ns, lat = "南緯", -lat if lat < 0.0
io << "(#{ew}: #{long}, #{ns}: #{lat})"
end # https://github.com/crystal-lang/crystal/issues/259
def distance(other)
i, r = Math::PI / 180, 6371.008
Math.acos(Math.sin(@latitude*i) * Math.sin(other.latitude * i) +
Math.cos(@latitude*i) * Math.cos(other.latitude * i) * Math.cos(@longitude * i - other.longitude * i)) * r
end
end
# メソッドの先頭を大文字に出来ないのでクラス名のメソッドは作ることが出来ない
# def GeoCoord(lng : Float64, lat : Float64)
# GeoCoord.new(lng, lat)
# end
Sites = {
"東京駅": GeoCoord.new(139.7673068, 35.6809591),
"シドニー・オペラハウス": GeoCoord.new(151.215278, -33.856778),
"グリニッジ天文台": GeoCoord.new(-0.0014, 51.4778),
}
Sites.each { |name, gc|
puts "#{name}: #{gc}"
}
puts ""
keys, len = Sites.keys, Sites.size
keys.each_with_index { |x, i|
y = keys[(i + 1) % len]
puts "#{x} ⇔ #{y}: #{Sites[x].distance(Sites[y])} [km]"
}
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
東京駅: (東経: 139.7673068, 北緯: 35.6809591)
シドニー・オペラハウス: (東経: 151.215278, 南緯: 33.856778)
グリニッジ天文台: (西経: 0.0014, 北緯: 51.4778)
東京駅 ⇔ シドニー・オペラハウス: 7823.269299386704 [km]
シドニー・オペラハウス ⇔ グリニッジ天文台: 16987.2708377249 [km]
グリニッジ天文台 ⇔ 東京駅: 9560.546566490015 [km]
</syntaxhighlight>
:Crystal には、<syntaxhighlight lang=ruby inline> attr_accessor </syntaxhighlight> はありませんが、標準ライブラリーのマクロに <syntaxhighlight lang=crystal inline> getter </syntaxhighlight>があるので
:: <syntaxhighlight lang=crystal line start=2>
getter :longitude, :latitude
</syntaxhighlight>
::としました。
::将来、<syntaxhighlight lang=ruby inline> attr_accessor </syntaxhighlight> が実装される可能性はありますが、姉妹品の<syntaxhighlight lang=crystal inline> setter </syntaxhighlight> との併用が下位互換性を考えると確実です。
: to_s は、Ruby ならば
:: <syntaxhighlight lang=ruby line start=7>
def to_s()
</syntaxhighlight>
:: <syntaxhighlight lang=ruby line start=12>
"(#{ew}: #{long}, #{ns}: #{lat})"
</syntaxhighlight>
:: ですが、Crystalでは追加の引数 <var>io</var> が必要で
:: <syntaxhighlight lang=ruby line start=7>
def to_s(io)
</syntaxhighlight>
:: <syntaxhighlight lang=ruby line start=12>
io << "(#{ew}: #{long}, #{ns}: #{lat})"
</syntaxhighlight>
: Ruby にはクラス名と同じ名前のメソッドで .new を呼出す文化があるのですが、Crystalはメソッドの先頭を大文字に出来ないので、これは見送りました。
==== 包含と継承 ====
[[JavaScript/クラス#包含と継承]]を、Rubyに移植した[[Ruby#包含と継承]]を、Crystalに移植しました。
;包含と継承の例:<syntaxhighlight lang=crystal line>
class Point
def initialize(@x = 0, @y = 0)
end
def inspect(io)
io << "x:#{@x}, y:#{@y}"
end
def move(dx = 0, dy = 0)
@x, @y = @x + dx, @y + dy
self
end
end
class Shape
def initialize(x = 0, y = 0)
@location = Point.new(x, y)
end
def inspect(io)
@location.inspect(io)
end
def move(x, y)
@location.move(x, y)
self
end
end
class Rectangle < Shape
def initialize(x = 0, y = 0, @width = 0, @height = 0)
super(x, y)
end
def inspect(io)
super(io)
io << ", width:#{@width}, height:#{@height}"
end
end
rct = Rectangle.new(12, 32, 100, 50)
p! rct,
rct.is_a?(Rectangle),
rct.is_a?(Shape),
rct.is_a?(Point),
rct.move(11, 21)
(END)</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
rct # => x:12, y:32, width:100, height:50
rct.is_a?(Rectangle) # => true
rct.is_a?(Shape) # => true
rct.is_a?(Point) # => false
rct.move(11, 21) # => x:23, y:53, width:100, height:50
</syntaxhighlight>
;crystal tool hierarchy:<syntaxhighlight lang=console>
% crystal tool hierarchy inclusion-and-inheritance.cr -e Shape
- class Object (4 bytes)
|
+- class Reference (4 bytes)
|
+- class Shape (16 bytes)
. @location : Point (8 bytes)
|
+- class Rectangle (24 bytes)
@width : Int32 (4 bytes)
@height : Int32 (4 bytes)
</syntaxhighlight>
: crystal の tool hierarchy サブコマンドで、クラスの継承関係がわかります。
==== 抽象クラス ====
[[Java/抽象クラス]]を、Crystalに移植しました。
;抽象クラスの宣言:<syntaxhighlight lang=Java>
abstract class クラス名
#
end
</syntaxhighlight>
: このクラス名は、 .new でインスタンス化出来ません。
:: Error: can't instantiate abstract class クラス名
: となります。
:インスタンス化することは出来ませんが、抽象クラスを別のクラスが継承する事は出来ます。
:また、抽象クラスを <code>super()</code> を使うことでメソッドを呼び出せるので、抽象メソッドではないメソッド(具象メソッド)を持つことも、インスタンス変数も持つことも出来ます。
:'''抽象クラスの例'''では、Shapeのinitializeメソッドが抽象クラスの具象メソッドとなっています。
;抽象メソッドの宣言:<syntaxhighlight lang=Java>
abstract def メソッド名
</syntaxhighlight>
: 派生先のクラスで、「メソッド名」を定義(def)し忘れると
:: Error: abstract `def クラス名#メソッド名()` must be implemented by クラス名
: となります
;抽象クラスの例:<syntaxhighlight lang=crystal line>
abstract class Shape
def initialize(@x = 0.0, @y = 0.0)
end
abstract def to_s(io)
abstract def area
end
class Square < Shape
def initialize(x, y, @wh = 0.0)
super(x, y)
end
def to_s(io)
io << "Square(#{@x}, #{@y}, #{@wh})"
end
def area
@wh * @wh
end
end
abstract class Shape
def initialize(@x = 0.0, @y = 0.0)
end
abstract def to_s(io)
abstract def area
end
class Square < Shape
def initialize(x, y, @wh = 0.0)
super(x, y)
end
def to_s(io)
io << "Square(#{@x}, #{@y}, #{@wh})"
end
def area
@wh * @wh
end
end
class Recrangle < Shape
def initialize(x, y, @w = 0.0, @h = 0.0)
super(x, y)
end
def to_s(io)
io << "Rectanle(#{@x}, #{@y}, #{@w}, #{@h})"
end
def area
@w * @h
end
end
class Circle < Shape
def initialize(x, y, @r = 0.0)
super(x, y)
end
def to_s(io)
io << "Circle(#{@x}, #{@y}, #{@r})"
end
def area
3.1425926536 * @r * @r
end
end
shapes = [
Square.new(5.0, 10.0, 15.0),
Recrangle.new(13.0, 23.0, 20.0, 10.0),
Circle.new(3.0, 2.0, 20.0),
] of Shape
shapes.each do |shape|
puts("#{shape}: #{shape.area}")
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
Square(5.0, 10.0, 15.0): 225.0
Rectanle(13.0, 23.0, 20.0, 10.0): 200.0
Circle(3.0, 2.0, 20.0): 1257.03706144
</syntaxhighlight>
;crystal tool hierarchy:<syntaxhighlight lang=console>
% crystal tool hierarchy abstract.cr -e Shape
- class Object (4 bytes)
|
+- class Reference (4 bytes)
|
+- class Shape (24 bytes)
. @x : Float64 (8 bytes)
. @y : Float64 (8 bytes)
|
+- class Circle (32 bytes)
| @r : Float64 (8 bytes)
|
+- class Recrangle (40 bytes)
| @w : Float64 (8 bytes)
| @h : Float64 (8 bytes)
|
+- class Square (32 bytes)
@wh : Float64 (8 bytes)
</syntaxhighlight>
: crystal の tool hierarchy サブコマンドで、クラスの継承関係がわかります。
: 「包含と継承の例」と比べると、ShapeとRectangleが同じ階層にあることがわかると思います。
[TODO:virtual class::いい例がない]
== キーワード ==
Crystalのキーワード( ''keywords'' ) は、以下の通り。
<code>abstract</code> <code>alias</code> <code>as</code> <code>asm</code> <code>begin</code> <code>break</code> <code>case</code> <code>class</code> <code>def</code> <code>do</code> <code>else</code> <code>elsif</code> <code>end</code> <code>ensure</code> <code>enum</code> <code>extend</code> <code>for</code> <code>fun</code> <code>if</code> <code>include</code> <code>instance_sizeof</code> <code>lib</code> <code>macro</code> <code>module</code> <code>next</code> <code>of</code> <code>out</code> <code>pointerof</code> <code>private</code> <code>protected</code> <code>rescue</code> <code>return</code> <code>require</code> <code>select</code> <code>sizeof</code> <code>struct</code> <code>super</code> <code>then</code> <code>type</code> <code>typeof</code> <code>uninitialized</code> <code>union</code> <code>unless</code> <code>until</code> <code>when</code> <code>while</code> <code>with</code> <code>yield</code>
<!--
<code>__DIR__</code> <code>__END_LINE__</code> <code>__FILE__</code> <code>__LINE__</code>
-->
== 演算子 ==
Crystalは、1つ、2つ、または3つのオペランドを持つ数多くの演算子をサポートしています<ref>[https://crystal-lang.org/reference/1.5/syntax_and_semantics/operators.html Operators]access-date:2022-07-22</ref>。
演算子式は、実際にはメソッド呼び出しとしてパースされます。例えば、<code>a + b</code> は <code>a.+(b)</code> と意味的に同じで、引数 b を持つ a のメソッド + を呼び出すことになります。
{| class="wikitable"
|+ 演算子の優先度
!種類
!演算子
|-
|インデックス アクセサー
|<code>[]</code>, <code>[]?</code>
|-
|単項
|<code>+</code>, <code>&+</code>, <code>-</code>, <code>&-</code>, <code>!</code>, <code>~</code>
|-
|指数
|<code>**</code>, <code>&**</code>
|-
|乗除
|<code>*</code>, <code>&*</code>, <code>/</code>, <code>//</code>, <code>%</code>
|-
|加減
|<code>+</code>, <code>&+</code>, <code>-</code>, <code>&-</code>
|-
|シフト
|<code><<</code>, <code>>></code>
|-
|ビット間 AND
|<code>&</code>
|-
|ビット間 OR/XOR
|<code><nowiki>|</nowiki></code>,<code>^</code>
|-
|等値
|<code>==</code>, <code>!=</code>, <code>=~</code>, <code>!~</code>, <code>===</code>
|-
|比較
|<code><</code>, <code><=</code>, <code>></code>, <code>>=</code>, <code><=></code>
|-
|論理 AND
|<code>&&</code>
|-
|論理 OR
|<code><nowiki>||</nowiki></code>
|-
|Range
|<code>..</code>, <code>...</code>
|-
|条件
|<code>?:</code>
|-
|代入
|<code>=</code>, <code>[]=</code>, <code>+=</code>, <code>&+=</code>, <code>-=</code>, <code>&-=</code>, <code>*=</code>, <code>&*=</code>, <code>/=</code>, <code>//=</code>, <code>%=</code>, <code><nowiki>|=</nowiki></code>, <code>&=</code>,<code>^=</code>,<code>**=</code>,<code><<=</code>,<code>>>=</code>, <code><nowiki>||=</nowiki></code>, <code>&&=</code>
|-
|スプラット
|<code>*</code>, <code>**</code>
|}
== 制御構造 ==
'''[[w:制御構造|制御構造]]'''(せいぎょこうぞう、''control flow'')とは、「順次」「分岐」「反復」という基本的な処理のことを言います。
{{コラム|Crystalの真理値|2=
制御構造は「条件式」が真であるか偽であるかによって分岐や反復の振る舞いが変わります。
では「条件式」が真・偽はどの様に決まるのでしょう?
Crystalでは <code>false</code> あるいは <code>nil</code> であると偽、それ以外が真です。
なので <code>0</code> も <code>[]</code>(空のArray) も <code>{}</code>(空のNamedTuple)も真です。
}}
=== 条件分岐 ===
Crystalの条件分岐には、[[#if|if]], [[#until|until]] と [[#case|case]]の3つの構文があります。
==== if ====
'''[[w:if|if]]'''は条件式によって実行・否を切り替える構造構文で、評価した式の値を返すので条件演算子でもあります。
;ifの例:<syntaxhighlight lang=crystal line>
a = 0.0 / 0.0
if a < 0
puts "minus"
elsif a > 0
puts "plus"
elsif a == 0
puts "zero"
else
puts a
end
p! (
if a < 0
"minus"
elsif a > 0
"plus"
elsif a == 0
"zero"
else
a
end
)
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
NaN
(if a < 0
"minus"
else
if a > 0
"plus"
else
if a == 0
"zero"
else
a
end
end
end) # => NaN
</syntaxhighlight>
:; elsif節:ifは、オプショナルな elsif 節を設け、条件式が偽であった時に別の条件に合致した処理を実行させることが出来ます。
:; else節:ifは、オプショナルな else 節を設け、条件式が偽であった時に処理を実行させることが出来ます。
: ifは値を返すので、メソッドの実引数に使うことが出来ますし、代入演算の右辺にも使えます。
==== 後置のif ====
Crystalには、RubyやPerlのような後置のifがあります。
;後置のifの例:<syntaxhighlight lang=crystal>
n = 0
puts "nは0" if n == 0
puts "nは1" if n == 1
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
nは0
</syntaxhighlight>
==== unless====
'''unless'''(アンレス)は条件式によって実行・否を切り替える構造構文ですが、ifとは条件式に対する挙動が逆です。
;unless文の例:<syntaxhighlight lang=crystal line>
a = 0.0 / 0.0
unless a == 0
puts "Non-zero"
else
puts a
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Non-zero
</syntaxhighlight>
:; else節 : unless文は、オプショナルな else 節を設け、条件式が真であった時に処理を実行させることが出来ます。
::また、unless文は elsif 節は持てません。
==== 後置のunless ====
Crystalには、RubyやPerlのような後置のunlessがあります。
;後置のunlessの例:<syntaxhighlight lang=crystal>
n = 0
puts "nは0" unless n == 0
puts "nは1" unless n == 1
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
nは1ではない
</syntaxhighlight>
==== case ====
caseは、複数の条件式によって処理を降る分ける用途の為に用意されています。
;caseの例:<syntaxhighlight lang=crystal line>
n = 2
case n
when 1
puts "one"
when 2
puts "two"
when 3
puts "three"
else
puts "other"
end
p! (
case n
when 1
"one"
when 2
"two"
when 3
"three"
else
"other"
end
)
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
two
(case n
when 1
"one"
when 2
"two"
when 3
"three"
else
"other"
end) # => "two"</syntaxhighlight>
:C言語系のswitch文に慣れた人はbreakがないことに気がつくと思います。Crystalのcaseはfall throughしませんし、fall throughさせる方法もありません。
===== when節が定数でなく式を受付けます =====
[[#if|if]]を使ったコードをcaseに書き換えてみましょう。
;case の式の省略:<syntaxhighlight lang=crystal line>
a = 0.0 / 0.0
case
when a < 0
puts "minus"
when a > 0
puts "plus"
when a == 0
puts "zero"
else
puts a
end
p! (
case true
when a < 0
"minus"
when a > 0
"plus"
when a == 0
"zero"
else
a
end
)
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
NaN
(case true
when a < 0
"minus"
when a > 0
"plus"
when a == 0
"zero"
else
a
end) # => NaN
</syntaxhighlight>
このコードは when 節の式の値とcaseの式を <code>===</code> で比較し、最初に一致した when に対応する式が実行される事を利用しています。
===== 型による分岐 =====
when 節が式ではなく型であった場合、caseの式を <code>is_a?</code> で評価し、最初に一致した when に対応する式が実行されます。
;型による分岐:<syntaxhighlight lang=crystal line>
p! 0.class,
0.is_a?(Object),
0.is_a?(Int32),
0.is_a?(Number),
0.is_a?(String)
case 0
when String
puts "String"
when Number
puts "Number"
when Int32
puts "Int32"
when Object
puts "Object"
else
puts "Unknown"
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
0.class # => Int32
0.is_a?(Object) # => true
0.is_a?(Int32) # => true
0.is_a?(Number) # => true
0.is_a?(String) # => false
Number
</syntaxhighlight>
暗黙のオブジェクト構文を使うと
:<syntaxhighlight lang=crystal line>
case 0
when .is_a?(String)
puts "String"
when .is_a?(Number)
puts "Number"
when .is_a(Int32)
puts "Int32"
when .is_a(Object)
puts "Object"
else
puts "Unknown"
end
</syntaxhighlight>
:と書くことが出来ます。
:: メソッドは、.is_a? に限定しないので、 .odd? .even? .include? など Bool を返すメソッドなら何でも使えます。
when に対応する式は、1つのことが珍しくないので、その場合は省略可能な then を補うと、1行で書けます。
:<syntaxhighlight lang=crystal line>
case 0
when String then puts "String"
when Number then puts "Number"
when Int32 then puts "Int32"
when Object then puts "Object"
else puts "Unknown"
end
</syntaxhighlight>
[TODO:タプルとダミー識別子 _ ]
===== 網羅性の検査 =====
when の代わりに in を使用すると、exhaustive case 式が作成されます。exhaustive case では、必要な in 条件を省略するとコンパイル時にエラーとなります。排他的論理和では、when 節と else 節を含むことはできません。
コンパイラは、以下の in 条件をサポートしています。
:<syntaxhighlight lang=crystal line>
case 0
when String then puts "String"
when Number then puts "Number"
when Int32 then puts "Int32"
when Object then puts "Object"
else puts "Unknown"
end
</syntaxhighlight>
caseの式がユニオンの場合、各要素型を条件として使用することができる。
;組合型チェック:<syntaxhighlight lang=crystal line>
var : ( Bool | Int32 | Float64 )?
var = 3.14
p! (
case var
in Bool then var ? 1 : 0
in Int32 then var
in Float64 then var.to_i
end
)
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
(case var
in Bool
var ? 1 : 0
in Int32
var
in Float64
var.to_i
end) # => 3
</syntaxhighlight>
[TODO:case in は enum にも使える]
[TODO:短絡評価 && || ]
=== 繰返し ===
Crystalには、他のプログラミング言語のような[[#繰返し構文|繰返し構文]]と、[[#イテレーターメソッド|イテレーターメソッド]]があります。
==== 繰返し構文 ====
Crystalの繰返し構文には、while と untilの2つがあります<ref>for も do-while も loop もありません。</ref>。
===== while =====
while(ホワイル)は条件が'''真'''である間、式を実行しつづけます。
;構文:<syntaxhighlight lang=crystal>
while 条件式
式1
式2
:
式n
end
</syntaxhighlight>
: Rubyと違い、条件式の後ろに <code>do</code> をつけることは出来ません。
;while文のコード例:<syntaxhighlight lang=crystal line>
i = 0
p! (
while i < 10
p! i
i += 1
break i if i > 5
end
)
</syntaxhighlight>
: 2行目の <code>i < 5</code>が真の間、次の2行を繰返します。
: 4行目の <code>i += 1</code> は <code>i = i + 1</code> の構文糖
;実行結果:<syntaxhighlight lang="text">
(while i < 10
p!(i)
i = i + 1
if i > 5
break i
end
end)# =>
i # => 0
i # => 1
i # => 2
i # => 3
i # => 4
i # => 5
6
</syntaxhighlight>
===== until =====
until(アンティル)は条件が'''偽'''である間、式を実行しつづけます。whileとは条件に対する挙動が逆です。
;構文:<syntaxhighlight lang=crystal>
until 条件式 [ do ]
文1
文2
:
文n
end
</syntaxhighlight>
: <code>do</code> は省略できます。
;untilのコード例:<syntaxhighlight lang=crystal line>
i = 0
until i == 3
puts i
i += 1
end
</syntaxhighlight>
: 2行目の <code>i == 3</code>が偽の間、次の2行を繰返します。
;実行結果:<syntaxhighlight lang="text">
0
1
2
</syntaxhighlight>
===== for =====
Crystalにはforがありませんが、コレクションのイテレーションメソッドを使うことで繰返しを簡素に実現出来ます。
==== Rangeオブジェクト ====
Rangeオブジェクトは、整数の区間を表し範囲演算子 <code>開始 ... 終了</code> で生成します。
;コード:<syntaxhighlight lang=crystal>
rng = 1..3
puts rng.class
rng.each do | n |
puts "#{n}番";
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Range(Int32, Int32)
1番
2番
3番
</syntaxhighlight>
==== Arrayオブジェクト ====
Arrayオブジェクトは、任意の Crystal オブジェクトを要素として持つことができます。
配列式<code>[要素1, 要素2, … 要素n]</code> で生成します。
;コード:<syntaxhighlight lang=crystal>
animals = ["ネコ", "金魚", "ハムスター"]
puts animals.class
animals.each do | animal |
puts "動物 #{animal}"
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Array(String)
動物 ネコ
動物 金魚
動物 ハムスター
</syntaxhighlight>
==== NamedTupleオブジェクト ====
NamedTupleオブジェクトは、任意の Crystal オブジェクトをキーに、任意の Crystal オブジェクトを値に持つことができる連想配列です。
NamedTuple式<code>{キー1 => 値1, キー2 => 値2, キーn => 値n}</code> で生成します。
また、キーが Symbol の場合
NamedTuple式<code>{キー1: 値1, キー2: 値2, キーn: 値n}</code> で生成することが出来ます。
;コード:<syntaxhighlight lang=crystal>
animals = {cat: "ネコ", gold_fish: "金魚", hamster: "ハムスター"}
puts animals.class
animals.each do | en, animal |
puts "動物 #{en}: #{animal}"
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
NamedTuple(cat: String, gold_fish: String, hamster: String)
動物 cat: ネコ
動物 gold_fish: 金魚
動物 hamster: ハムスター
</syntaxhighlight>
このように、Crystalではforがなくてもコレクションのメソッドで同様の処理を実現できます。
===== loop =====
loop、ありません。
while true で代用します。
;loopの代用コード例:<syntaxhighlight lang=crystal line>
i = 1
while true
puts "0b%b" % i
i <<= 1
break if i > 2**8
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
0b1
0b10
0b100
0b1000
0b10000
0b100000
0b1000000
0b10000000
0b100000000
</syntaxhighlight>
:5行目の、<code>break if i > 2**8</code>でループを脱出するようにしています。この様に break や return あるいは例外が上がらないとループは永久に終わりません。
:このコードは、Crystalにはない do-while文を模倣する例にもなっています。
==== イテレーターメソッド ====
===== Integer#times =====
Integer#timesは与えられたブロックをオブジェクトの示す整数値回くりかえします。
:コード<syntaxhighlight lang=crystal>
3.times{ puts "Hello, world!" }
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Hello, world!
Hello, world!
Hello, world!
</syntaxhighlight>
;繰返したい処理が2行以上ある場合:<syntaxhighlight lang=crystal>
3.times {
puts "Hello"
puts "World"
puts ""
}
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Hello
World
Hello
World
Hello
World
</syntaxhighlight>
;ループ変数を使た例:<syntaxhighlight lang=crystal>
3.times do |i|
puts "#{i}の倍は#{2 * i}"
end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
0の倍は0
1の倍は2
2の倍は4
</syntaxhighlight>
;ブロックを伴わないtimesメソッド:<syntaxhighlight lang=crystal>
iter = 3.times
puts iter.class
p! iter.next
p! iter.next
p! iter.next
p! iter.next
p! iter.next
p! iter.next
# puts iter.next # `next': StopIteration: iteration reached an end
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Int::TimesIterator(Int32)
iter.next # => 0
iter.next # => 1
iter.next # => 2
iter.next # => #<Iterator::Stop:0x7fb5bedd7fe0>
iter.next # => #<Iterator::Stop:0x7fb5bedd7fe0>
iter.next # => #<Iterator::Stop:0x7fb5bedd7fe0>
</syntaxhighlight>
: Integer#times にブロックを渡さないと、Int::TimesIterator([T])オブジェクトが返ります。
: Int::TimesIterator([T])オブジェクトは外部イテレーターと呼ばれnextメソッドで反復を行えます。
== メソッド ==
=== クラスのメソッド一覧 ===
Crystal には、Objectクラスにmethodsメソッドがないので、マクロで実装しました。
;RubyのObject#methods:<syntaxhighlight lang=ruby>
p Object.methods.sort,
Integer.methods.sort,
Float.methods.sort,
Array.methods.sort,
Range.methods.sort
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
[:!, :!=, :!~, :<, :<=, :<=>, :==, :===, :=~, :>, :>=, :__id__, :__send__, :alias_method, :allocate, :ancestors, :attr, :attr_accessor, :attr_reader, :attr_writer, :autoload, :autoload?, :class, :class_eval, :class_exec, :class_variable_defined?, :class_variable_get, :class_variable_set, :class_variables, :clone, :const_defined?, :const_get, :const_missing, :const_set, :const_source_location, :constants, :define_method, :define_singleton_method, :deprecate_constant, :display, :dup, :enum_for, :eql?, :equal?, :extend, :freeze, :frozen?, :hash, :include, :include?, :included_modules, :inspect, :instance_eval, :instance_exec, :instance_method, :instance_methods, :instance_of?, :instance_variable_defined?, :instance_variable_get, :instance_variable_set, :instance_variables, :is_a?, :itself, :kind_of?, :method, :method_defined?, :methods, :module_eval, :module_exec, :name, :new, :nil?, :object_id, :prepend, :private_class_method, :private_constant, :private_instance_methods, :private_method_defined?, :private_methods, :protected_instance_methods, :protected_method_defined?, :protected_methods, :public_class_method, :public_constant, :public_instance_method, :public_instance_methods, :public_method, :public_method_defined?, :public_methods, :public_send, :remove_class_variable, :remove_instance_variable, :remove_method, :respond_to?, :send, :singleton_class, :singleton_class?, :singleton_method, :singleton_methods, :subclasses, :superclass, :taint, :tainted?, :tap, :then, :to_enum, :to_s, :trust, :undef_method, :untaint, :untrust, :untrusted?, :yield_self]
[:!, :!=, :!~, :<, :<=, :<=>, :==, :===, :=~, :>, :>=, :__id__, :__send__, :alias_method, :allocate, :ancestors, :attr, :attr_accessor, :attr_reader, :attr_writer, :autoload, :autoload?, :class, :class_eval, :class_exec, :class_variable_defined?, :class_variable_get, :class_variable_set, :class_variables, :clone, :const_defined?, :const_get, :const_missing, :const_set, :const_source_location, :constants, :define_method, :define_singleton_method, :deprecate_constant, :display, :dup, :enum_for, :eql?, :equal?, :extend, :freeze, :frozen?, :hash, :include, :include?, :included_modules, :inspect, :instance_eval, :instance_exec, :instance_method, :instance_methods, :instance_of?, :instance_variable_defined?, :instance_variable_get, :instance_variable_set, :instance_variables, :is_a?, :itself, :kind_of?, :method, :method_defined?, :methods, :module_eval, :module_exec, :name, :nil?, :object_id, :prepend, :private_class_method, :private_constant, :private_instance_methods, :private_method_defined?, :private_methods, :protected_instance_methods, :protected_method_defined?, :protected_methods, :public_class_method, :public_constant, :public_instance_method, :public_instance_methods, :public_method, :public_method_defined?, :public_methods, :public_send, :remove_class_variable, :remove_instance_variable, :remove_method, :respond_to?, :send, :singleton_class, :singleton_class?, :singleton_method, :singleton_methods, :sqrt, :subclasses, :superclass, :taint, :tainted?, :tap, :then, :to_enum, :to_s, :trust, :try_convert, :undef_method, :untaint, :untrust, :untrusted?, :yield_self]
[:!, :!=, :!~, :<, :<=, :<=>, :==, :===, :=~, :>, :>=, :__id__, :__send__, :alias_method, :allocate, :ancestors, :attr, :attr_accessor, :attr_reader, :attr_writer, :autoload, :autoload?, :class, :class_eval, :class_exec, :class_variable_defined?, :class_variable_get, :class_variable_set, :class_variables, :clone, :const_defined?, :const_get, :const_missing, :const_set, :const_source_location, :constants, :define_method, :define_singleton_method, :deprecate_constant, :display, :dup, :enum_for, :eql?, :equal?, :extend, :freeze, :frozen?, :hash, :include, :include?, :included_modules, :inspect, :instance_eval, :instance_exec, :instance_method, :instance_methods, :instance_of?, :instance_variable_defined?, :instance_variable_get, :instance_variable_set, :instance_variables, :is_a?, :itself, :kind_of?, :method, :method_defined?, :methods, :module_eval, :module_exec, :name, :nil?, :object_id, :prepend, :private_class_method, :private_constant, :private_instance_methods, :private_method_defined?, :private_methods, :protected_instance_methods, :protected_method_defined?, :protected_methods, :public_class_method, :public_constant, :public_instance_method, :public_instance_methods, :public_method, :public_method_defined?, :public_methods, :public_send, :remove_class_variable, :remove_instance_variable, :remove_method, :respond_to?, :send, :singleton_class, :singleton_class?, :singleton_method, :singleton_methods, :subclasses, :superclass, :taint, :tainted?, :tap, :then, :to_enum, :to_s, :trust, :undef_method, :untaint, :untrust, :untrusted?, :yield_self]
[:!, :!=, :!~, :<, :<=, :<=>, :==, :===, :=~, :>, :>=, :[], :__id__, :__send__, :alias_method, :allocate, :ancestors, :attr, :attr_accessor, :attr_reader, :attr_writer, :autoload, :autoload?, :class, :class_eval, :class_exec, :class_variable_defined?, :class_variable_get, :class_variable_set, :class_variables, :clone, :const_defined?, :const_get, :const_missing, :const_set, :const_source_location, :constants, :define_method, :define_singleton_method, :deprecate_constant, :display, :dup, :enum_for, :eql?, :equal?, :extend, :freeze, :frozen?, :hash, :include, :include?, :included_modules, :inspect, :instance_eval, :instance_exec, :instance_method, :instance_methods, :instance_of?, :instance_variable_defined?, :instance_variable_get, :instance_variable_set, :instance_variables, :is_a?, :itself, :kind_of?, :method, :method_defined?, :methods, :module_eval, :module_exec, :name, :new, :nil?, :object_id, :prepend, :private_class_method, :private_constant, :private_instance_methods, :private_method_defined?, :private_methods, :protected_instance_methods, :protected_method_defined?, :protected_methods, :public_class_method, :public_constant, :public_instance_method, :public_instance_methods, :public_method, :public_method_defined?, :public_methods, :public_send, :remove_class_variable, :remove_instance_variable, :remove_method, :respond_to?, :send, :singleton_class, :singleton_class?, :singleton_method, :singleton_methods, :subclasses, :superclass, :taint, :tainted?, :tap, :then, :to_enum, :to_s, :trust, :try_convert, :undef_method, :untaint, :untrust, :untrusted?, :yield_self]
[:!, :!=, :!~, :<, :<=, :<=>, :==, :===, :=~, :>, :>=, :__id__, :__send__, :alias_method, :allocate, :ancestors, :attr, :attr_accessor, :attr_reader, :attr_writer, :autoload, :autoload?, :class, :class_eval, :class_exec, :class_variable_defined?, :class_variable_get, :class_variable_set, :class_variables, :clone, :const_defined?, :const_get, :const_missing, :const_set, :const_source_location, :constants, :define_method, :define_singleton_method, :deprecate_constant, :display, :dup, :enum_for, :eql?, :equal?, :extend, :freeze, :frozen?, :hash, :include, :include?, :included_modules, :inspect, :instance_eval, :instance_exec, :instance_method, :instance_methods, :instance_of?, :instance_variable_defined?, :instance_variable_get, :instance_variable_set, :instance_variables, :is_a?, :itself, :kind_of?, :method, :method_defined?, :methods, :module_eval, :module_exec, :name, :new, :nil?, :object_id, :prepend, :private_class_method, :private_constant, :private_instance_methods, :private_method_defined?, :private_methods, :protected_instance_methods, :protected_method_defined?, :protected_methods, :public_class_method, :public_constant, :public_instance_method, :public_instance_methods, :public_method, :public_method_defined?, :public_methods, :public_send, :remove_class_variable, :remove_instance_variable, :remove_method, :respond_to?, :send, :singleton_class, :singleton_class?, :singleton_method, :singleton_methods, :subclasses, :superclass, :taint, :tainted?, :tap, :then, :to_enum, :to_s, :trust, :undef_method, :untaint, :untrust, :untrusted?, :yield_self]
</syntaxhighlight>
;Crystalに実装したmethodsマクロ:<syntaxhighlight lang=crystal>
class Object
macro methods
{{ @type.methods.map(&.name.stringify).sort.uniq }}
end
end
p! Object.methods,
Reference.methods,
Array.methods,
Box.methods,
Channel.methods,
Deque.methods,
Dir.methods,
Exception.methods,
ArgumentError.methods,
DivisionByZeroError.methods,
IndexError.methods,
InvalidByteSequenceError.methods,
Fiber.methods,
Hash.methods,
IO.methods,
File.methods,
Mutex.methods,
PrettyPrint.methods,
Process.methods,
Regex.methods,
String.methods,
Thread.methods,
Bool.methods,
Int32.methods,
Float64.methods,
Proc.methods
</syntaxhighlight>
;実行結果:<syntaxhighlight lang="text">
Object.methods # => ["!=", "!~", "==", "===", "=~", "class", "crystal_type_id", "dup", "hash", "in?", "inspect", "itself", "not_nil!", "pretty_inspect", "pretty_print", "tap", "to_s", "try", "unsafe_as"]
Reference.methods # => ["==", "dup", "exec_recursive", "exec_recursive_clone", "hash", "inspect", "object_id", "pretty_print", "same?", "to_s"]
Array.methods # => ["&", "*", "+", "-", "<<", "<=>", "==", "[]", "[]=", "[]?", "calculate_new_capacity", "check_needs_resize", "check_needs_resize_for_unshift", "clear", "clone", "compact", "compact!", "concat", "delete", "delete_at", "dup", "each_repeated_permutation", "fill", "first", "flatten", "increase_capacity", "increase_capacity_for_unshift", "index", "initialize", "insert", "inspect", "internal_delete", "last", "map", "map_with_index", "needs_resize?", "pop", "pop?", "pretty_print", "product", "push", "reject!", "remaining_capacity", "repeated_permutations", "replace", "reset_buffer_to_root_buffer", "resize_if_cant_insert", "resize_to_capacity", "resize_to_capacity_for_unshift", "reverse", "root_buffer", "rotate", "rotate!", "select!", "shift", "shift?", "shift_buffer_by", "shift_when_not_empty", "shuffle", "size", "size=", "skip", "sort", "sort!", "sort_by", "sort_by!", "to_a", "to_lookup_hash", "to_s", "to_unsafe", "to_unsafe_slice", "transpose", "truncate", "uniq", "uniq!", "unsafe_fetch", "unsafe_put", "unshift", "unstable_sort", "unstable_sort!", "unstable_sort_by", "unstable_sort_by!", "|"]
Box.methods # => ["initialize", "object"]
Channel.methods # => ["close", "closed?", "dequeue_receiver", "dequeue_sender", "initialize", "inspect", "pretty_print", "receive", "receive?", "receive_impl", "receive_internal", "receive_select_action", "receive_select_action?", "send", "send_internal", "send_select_action"]
Deque.methods # => ["+", "<<", "==", "buffer", "clear", "clone", "concat", "delete", "delete_at", "dup", "each", "halfs", "increase_capacity", "initialize", "insert", "inspect", "internal_delete", "pop", "pop?", "pretty_print", "push", "reject!", "rotate!", "select!", "shift", "shift?", "size", "size=", "to_s", "unsafe_fetch", "unsafe_put", "unshift"]
Dir.methods # => ["children", "close", "each", "each_child", "entries", "initialize", "inspect", "path", "pretty_print", "read", "rewind", "to_s"]
Exception.methods # => ["backtrace", "backtrace?", "callstack", "callstack=", "cause", "initialize", "inspect", "inspect_with_backtrace", "message", "to_s"]
ArgumentError.methods # => ["initialize"]
DivisionByZeroError.methods # => ["initialize"]
IndexError.methods # => ["initialize"]
InvalidByteSequenceError.methods # => ["initialize"]
Fiber.methods # => ["cancel_timeout", "dead?", "enqueue", "initialize", "inspect", "makecontext", "name", "name=", "next", "next=", "previous", "previous=", "push_gc_roots", "resumable?", "resume", "resume_event", "run", "running?", "stack_bottom", "stack_bottom=", "timeout", "timeout_event", "timeout_select_action", "timeout_select_action=", "to_s"]
Hash.methods # => ["==", "[]", "[]=", "[]?", "add_entry_and_increment_size", "clear", "clear_entries", "clear_impl", "clear_indices", "clone", "compact", "compact!", "compare_by_identity", "compare_by_identity?", "compute_indices_bytesize", "delete", "delete_entry", "delete_entry_and_update_counts", "delete_impl", "delete_linear_scan", "dig", "dig?", "do_compaction", "double_indices_size", "dup", "each", "each_entry_with_index", "each_key", "each_value", "empty?", "entries", "entries_capacity", "entries_full?", "entries_size", "entry_matches?", "fetch", "find_entry", "find_entry_with_index", "find_entry_with_index_linear_scan", "first_entry?", "first_key", "first_key?", "first_value", "first_value?", "fit_in_indices", "get_entry", "get_index", "has_key?", "has_value?", "hash", "indices_malloc_size", "indices_size", "initialize", "initialize_clone", "initialize_clone_entries", "initialize_compare_by_identity", "initialize_copy_non_entries_vars", "initialize_default_block", "initialize_dup", "initialize_dup_entries", "inspect", "invert", "key_for", "key_for?", "key_hash", "keys", "last_entry?", "last_key", "last_key?", "last_value", "last_value?", "malloc_entries", "malloc_indices", "merge", "merge!", "merge_into!", "next_index", "pretty_print", "proper_subset_of?", "proper_superset_of?", "put", "realloc_entries", "realloc_indices", "rehash", "reject", "reject!", "resize", "select", "select!", "set_entry", "set_index", "shift", "shift?", "size", "subset_of?", "superset_of?", "to_a", "to_a_impl", "to_h", "to_s", "transform_keys", "transform_values", "transform_values!", "update", "update_linear_scan", "upsert", "values", "values_at"]
IO.methods # => ["<<", "check_open", "close", "closed?", "decoder", "each_byte", "each_char", "each_line", "encoder", "encoding", "flush", "getb_to_end", "gets", "gets_peek", "gets_slow", "gets_to_end", "has_non_utf8_encoding?", "peek", "peek_or_read_utf8", "peek_or_read_utf8_masked", "pos", "pos=", "print", "printf", "puts", "read", "read_at", "read_byte", "read_bytes", "read_char", "read_char_with_bytesize", "read_fully", "read_fully?", "read_line", "read_string", "read_utf8", "read_utf8_byte", "rewind", "seek", "set_encoding", "skip", "skip_to_end", "tell", "tty?", "utf8_encoding?", "write", "write_byte", "write_bytes", "write_string", "write_utf8"]
File.methods # => ["delete", "initialize", "inspect", "path", "read_at", "size", "truncate"]
Mutex.methods # => ["initialize", "lock", "lock_slow", "synchronize", "try_lock", "unlock"]
PrettyPrint.methods # => ["break_outmost_groups", "breakable", "comma", "current_group", "fill_breakable", "flush", "group", "group_queue", "group_sub", "indent", "initialize", "list", "nest", "newline", "surround", "text"]
Process.methods # => ["channel", "close", "close_io", "copy_io", "ensure_channel", "error", "error?", "exists?", "finalize", "initialize", "input", "input?", "output", "output?", "pid", "signal", "stdio_to_fd", "terminate", "terminated?", "wait"]
Regex.methods # => ["+", "==", "===", "=~", "capture_count", "clone", "dup", "finalize", "hash", "initialize", "inspect", "internal_matches?", "match", "match_at_byte_index", "matches?", "matches_at_byte_index?", "name_table", "options", "source", "to_s"]
String.methods # => ["%", "*", "+", "<=>", "==", "=~", "[]", "[]?", "ascii_only?", "blank?", "byte_at", "byte_at?", "byte_delete_at", "byte_index", "byte_index_to_char_index", "byte_slice", "byte_slice?", "bytes", "bytesize", "calc_excess_left", "calc_excess_right", "camelcase", "capitalize", "center", "char_at", "char_bytesize_at", "char_index_to_byte_index", "chars", "check_no_null_byte", "chomp", "clone", "codepoint_at", "codepoints", "compare", "count", "delete", "delete_at", "downcase", "dump", "dump_char", "dump_hex", "dump_or_inspect", "dump_or_inspect_char", "dump_or_inspect_unquoted", "dump_unquoted", "dup", "each_byte", "each_byte_index_and_char_index", "each_char", "each_char_with_index", "each_codepoint", "each_grapheme", "each_grapheme_boundary", "each_line", "empty?", "encode", "ends_with?", "find_start_and_end", "grapheme_size", "graphemes", "gsub", "gsub_append", "gsub_ascii_char", "has_back_references?", "hash", "hexbytes", "hexbytes?", "includes?", "index", "insert", "insert_impl", "inspect", "inspect_char", "inspect_unquoted", "just", "lchop", "lchop?", "lines", "ljust", "lstrip", "match", "matches?", "partition", "presence", "pretty_print", "rchop", "rchop?", "remove_excess", "remove_excess_left", "remove_excess_right", "reverse", "rindex", "rjust", "rpartition", "rstrip", "scan", "scan_backreferences", "scrub", "single_byte_optimizable?", "size", "size_known?", "split", "split_by_empty_separator", "split_single_byte", "squeeze", "starts_with?", "strip", "sub", "sub_append", "sub_index", "sub_range", "succ", "titleize", "to_f", "to_f32", "to_f32?", "to_f64", "to_f64?", "to_f?", "to_f_impl", "to_i", "to_i128", "to_i128?", "to_i16", "to_i16?", "to_i32", "to_i32?", "to_i64", "to_i64?", "to_i8", "to_i8?", "to_i?", "to_s", "to_slice", "to_u128", "to_u128?", "to_u16", "to_u16?", "to_u32", "to_u32?", "to_u64", "to_u64?", "to_u8", "to_u8?", "to_unsafe", "to_unsigned_info", "to_utf16", "tr", "underscore", "unicode_delete_at", "unsafe_byte_at", "unsafe_byte_slice", "unsafe_byte_slice_string", "upcase", "valid_encoding?"]
Thread.methods # => ["detach", "event_base", "gc_thread_handler", "gc_thread_handler=", "initialize", "join", "main_fiber", "next", "next=", "previous", "previous=", "scheduler", "stack_address", "start", "to_unsafe"]
Bool.methods # => ["!=", "&", "==", "^", "clone", "hash", "to_s", "to_unsafe", "|"]
Int32.methods # => ["!=", "&", "&*", "&+", "&-", "*", "+", "-", "/", "<", "<=", "==", ">", ">=", "^", "clone", "leading_zeros_count", "popcount", "to_f", "to_f!", "to_f32", "to_f32!", "to_f64", "to_f64!", "to_i", "to_i!", "to_i128", "to_i128!", "to_i16", "to_i16!", "to_i32", "to_i32!", "to_i64", "to_i64!", "to_i8", "to_i8!", "to_u", "to_u!", "to_u128", "to_u128!", "to_u16", "to_u16!", "to_u32", "to_u32!", "to_u64", "to_u64!", "to_u8", "to_u8!", "trailing_zeros_count", "unsafe_chr", "unsafe_div", "unsafe_mod", "unsafe_shl", "unsafe_shr", "|"]
Float64.methods # => ["!=", "*", "**", "+", "-", "/", "<", "<=", "==", ">", ">=", "ceil", "clone", "fdiv", "floor", "next_float", "prev_float", "round_away", "round_even", "to_f", "to_f!", "to_f32", "to_f32!", "to_f64", "to_f64!", "to_i", "to_i!", "to_i128", "to_i128!", "to_i16", "to_i16!", "to_i32", "to_i32!", "to_i64", "to_i64!", "to_i8", "to_i8!", "to_s", "to_u", "to_u!", "to_u128", "to_u128!", "to_u16", "to_u16!", "to_u32", "to_u32!", "to_u64", "to_u64!", "to_u8", "to_u8!", "trunc"]
Proc.methods # => ["==", "===", "arity", "call", "clone", "closure?", "closure_data", "hash", "internal_representation", "partial", "pointer", "to_s"]</syntaxhighlight>
== 脚註 ==
<references />
== 外部リンク ==
* [https://crystal-lang.org/ The Crystal Programming Language] {{---}} 公式サイト
** [https://crystal-lang.org/api/1.5.0/ Crystal 1.5.0 リファレンス]
** [https://play.crystal-lang.org/#/cr Compile & run code in Crystal] {{---}} playground
[[Category:Crystal|*]]
[[Category:プログラミング言語]]
{{NDC|007.64}}
4g6se7iqgtiulfobl1ts0jyos5or9z6